国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

使用Softmax的信息來教學 —— 知識蒸餾

深度學習自然語言處理 ? 來源:AI公園 ? 作者:Sayak Paul ? 2020-10-10 10:23 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

導讀

從各個層次給大家講解模型的知識蒸餾的相關內容,并通過實際的代碼給大家進行演示。

公眾號后臺回復“模型蒸餾”,下載已打包好的代碼。

本報告討論了非常厲害模型優化技術 —— 知識蒸餾,并給大家過了一遍相關的TensorFlow的代碼。

“模型集成是一個相當有保證的方法,可以獲得2%的準確性。“ —— Andrej Karpathy

我絕對同意!然而,部署重量級模型的集成在許多情況下并不總是可行的。有時,你的單個模型可能太大(例如GPT-3),以至于通常不可能將其部署到資源受限的環境中。這就是為什么我們一直在研究一些模型優化方法 ——量化和剪枝。在這個報告中,我們將討論一個非常厲害的模型優化技術 —— 知識蒸餾。

Softmax告訴了我們什么?

當處理一個分類問題時,使用softmax作為神經網絡的最后一個激活單元是非常典型的用法。這是為什么呢?因為softmax函數接受一組logit為輸入并輸出離散類別上的概率分布。比如,手寫數字識別中,神經網絡可能有較高的置信度認為圖像為1。不過,也有輕微的可能性認為圖像為7。如果我們只處理像[1,0]這樣的獨熱編碼標簽(其中1和0分別是圖像為1和7的概率),那么這些信息就無法獲得。

人類已經很好地利用了這種相對關系。更多的例子包括,長得很像貓的狗,棕紅色的,貓一樣的老虎等等。正如Hinton等人所認為的

一輛寶馬被誤認為是一輛垃圾車的可能性很小,但被誤認為是一個胡蘿卜的可能性仍然要高很多倍。

這些知識可以幫助我們在各種情況下進行極好的概括。這個思考過程幫助我們更深入地了解我們的模型對輸入數據的想法。它應該與我們考慮輸入數據的方式一致。

所以,現在該做什么?一個迫在眉睫的問題可能會突然出現在我們的腦海中 —— 我們在神經網絡中使用這些知識的最佳方式是什么?讓我們在下一節中找出答案。

使用Softmax的信息來教學 —— 知識蒸餾

softmax信息比獨熱編碼標簽更有用。在這個階段,我們可以得到:

訓練數據

訓練好的神經網絡在測試數據上表現良好

我們現在感興趣的是使用我們訓練過的網絡產生的輸出概率。

考慮教人去認識MNIST數據集的英文數字。你的學生可能會問 —— 那個看起來像7嗎?如果是這樣的話,這絕對是個好消息,因為你的學生,肯定知道1和7是什么樣子。作為一名教師,你能夠把你的數字知識傳授給你的學生。這種想法也有可能擴展到神經網絡。

知識蒸餾的高層機制

所以,這是一個高層次的方法:

訓練一個在數據集上表現良好神經網絡。這個網絡就是“教師”模型。

使用教師模型在相同的數據集上訓練一個學生模型。這里的問題是,學生模型的大小應該比老師的小得多。

本工作流程簡要闡述了知識蒸餾的思想。

為什么要小?這不是我們想要的嗎?將一個輕量級模型部署到生產環境中,從而達到足夠的性能。

用圖像分類的例子來學習

對于一個圖像分類的例子,我們可以擴展前面的高層思想:

訓練一個在圖像數據集上表現良好的教師模型。在這里,交叉熵損失將根據數據集中的真實標簽計算。

在相同的數據集上訓練一個較小的學生模型,但是使用來自教師模型(softmax輸出)的預測作為ground-truth標簽。這些softmax輸出稱為軟標簽。稍后會有更詳細的介紹。

我們為什么要用軟標簽來訓練學生模型?

請記住,在容量方面,我們的學生模型比教師模型要小。因此,如果你的數據集足夠復雜,那么較小的student模型可能不太適合捕捉訓練目標所需的隱藏表示。我們在軟標簽上訓練學生模型來彌補這一點,它提供了比獨熱編碼標簽更有意義的信息。在某種意義上,我們通過暴露一些訓練數據集來訓練學生模型來模仿教師模型的輸出。

希望這能讓你們對知識蒸餾有一個直觀的理解。在下一節中,我們將更詳細地了解學生模型的訓練機制。

知識蒸餾中的損失函數

為了訓練學生模型,我們仍然可以使用教師模型的軟標簽以及學生模型的預測來計算常規交叉熵損失。學生模型很有可能對許多輸入數據點都有信心,并且它會預測出像下面這樣的概率分布:

高置信度的預測

擴展Softmax

這些弱概率的問題是,它們沒有捕捉到學生模型有效學習所需的信息。例如,如果概率分布像[0.99, 0.01],幾乎不可能傳遞圖像具有數字7的特征的知識。

Hinton等人解決這個問題的方法是,在將原始logits傳遞給softmax之前,將教師模型的原始logits按一定的溫度進行縮放。這樣,就會在可用的類標簽中得到更廣泛的分布。然后用同樣的溫度用于訓練學生模型。

我們可以把學生模型的修正損失函數寫成這個方程的形式:

其中,pi是教師模型得到軟概率分布,si的表達式為:

defget_kd_loss(student_logits,teacher_logits, true_labels,temperature, alpha,beta): teacher_probs=tf.nn.softmax(teacher_logits/temperature) kd_loss=tf.keras.losses.categorical_crossentropy( teacher_probs,student_logits/temperature, from_logits=True) returnkd_loss

使用擴展Softmax來合并硬標簽

Hinton等人還探索了在真實標簽(通常是獨熱編碼)和學生模型的預測之間使用傳統交叉熵損失的想法。當訓練數據集很小,并且軟標簽沒有足夠的信號供學生模型采集時,這一點尤其有用。

當它與擴展的softmax相結合時,這種方法的工作效果明顯更好,而整體損失函數成為兩者之間的加權平均。

defget_kd_loss(student_logits,teacher_logits, true_labels,temperature, alpha,beta): teacher_probs=tf.nn.softmax(teacher_logits/temperature) kd_loss=tf.keras.losses.categorical_crossentropy( teacher_probs,student_logits/temperature, from_logits=True) ce_loss=tf.keras.losses.sparse_categorical_crossentropy( true_labels,student_logits,from_logits=True) total_loss=(alpha*kd_loss)+(beta*ce_loss) returntotal_loss/(alpha+beta)

建議β的權重小于α。

在原始Logits上進行操作

Caruana等人操作原始logits,而不是softmax值。這個工作流程如下:

這部分保持相同 —— 訓練一個教師模型。這里交叉熵損失將根據數據集中的真實標簽計算。

現在,為了訓練學生模型,訓練目標變成分別最小化來自教師和學生模型的原始對數之間的平均平方誤差。

mse=tf.keras.losses.MeanSquaredError() defmse_kd_loss(teacher_logits,student_logits): returnmse(teacher_logits,student_logits)

使用這個損失函數的一個潛在缺點是它是無界的。原始logits可以捕獲噪聲,而一個小模型可能無法很好的擬合。這就是為什么為了使這個損失函數很好地適合蒸餾狀態,學生模型需要更大一點。

Tang等人探索了在兩個損失之間插值的想法:擴展softmax和MSE損失。數學上,它看起來是這樣的:

根據經驗,他們發現當α = 0時,(在NLP任務上)可以獲得最佳的性能。

如果你在這一點上感到有點不知怎么辦,不要擔心。希望通過代碼,事情會變得清楚。

一些訓練方法

在本節中,我將向你提供一些在使用知識蒸餾時可以考慮的訓練方法。

使用數據增強

他們在NLP數據集上展示了這個想法,但這也適用于其他領域。為了更好地指導學生模型訓練,使用數據增強會有幫助,特別是當你處理的數據較少的時候。因為我們通常保持學生模型比教師模型小得多,所以我們希望學生模型能夠獲得更多不同的數據,從而更好地捕捉領域知識。

使用標記的和未標記的數據訓練學生模型

在像Noisy Student Training和SimCLRV2這樣的文章中,作者在訓練學生模型時使用了額外的未標記數據。因此,你將使用你的teacher模型來生成未標記數據集上的ground-truth分布。這在很大程度上有助于提高模型的可泛化性。這種方法只有在你所處理的數據集中有未標記數據可用時才可行。有時,情況可能并非如此(例如,醫療保健)。Xie等人探索了數據平衡和數據過濾等技術,以緩解在訓練學生模型時合并未標記數據可能出現的問題。

在訓練教師模型時不要使用標簽平滑

標簽平滑是一種技術,用來放松由模型產生的高可信度預測。它有助于減少過擬合,但不建議在訓練教師模型時使用標簽平滑,因為無論如何,它的logits是按一定的溫度縮放的。因此,一般不推薦在知識蒸餾的情況下使用標簽平滑。

使用更高的溫度值

Hinton等人建議使用更高的溫度值來soften教師模型預測的分布,這樣軟標簽可以為學生模型提供更多的信息。這在處理小型數據集時特別有用。對于更大的數據集,信息可以通過訓練樣本的數量來獲得。

實驗結果

讓我們先回顧一下實驗設置。我在實驗中使用了Flowers數據集。除非另外指定,我使用以下配置:

我使用MobileNetV2作為基本模型進行微調,學習速度設置為1e-5,Adam作為優化器。

我們將τ設置為5。

α = 0.9,β = 0.1。

對于學生模型,使用下面這個簡單的結構:

Layer (type) Output Shape Param # ================================================================= conv2d (Conv2D) (None, 222, 222, 64) 1792 _________________________________________________________________ max_pooling2d (MaxPooling2D) (None, 55, 55, 64) 0 _________________________________________________________________ conv2d_1 (Conv2D) (None, 53, 53, 128) 73856 _________________________________________________________________ global_average_pooling2d_3 ( (None, 128) 0 _________________________________________________________________ dense_3 (Dense) (None, 512) 66048 _________________________________________________________________ dense_4 (Dense) (None, 5) 2565 =================================================================

在訓練學生模型時,我使用Adam作為優化器,學習速度為1e-2。

在使用數據增強訓練student模型的過程中,我使用了與上面提到的相同的默認超參數的加權平均損失。

學生模型基線

為了使性能比較公平,我們還從頭開始訓練淺的CNN并觀察它的性能。注意,在本例中,我使用Adam作為優化器,學習速率為1e-3。

訓練循環

在看到結果之前,我想說明一下訓練循環,以及如何在經典的model.fit()調用中包裝它。這就是訓練循環的樣子:

deftrain_step(self,data): images,labels=data teacher_logits=self.trained_teacher(images) withtf.GradientTape()astape: student_logits=self.student(images) loss=get_kd_loss(teacher_logits,student_logits) gradients=tape.gradient(loss,self.student.trainable_variables) self.optimizer.apply_gradients(zip(gradients,self.student.trainable_variables)) train_loss.update_state(loss) train_acc.update_state(labels,tf.nn.softmax(student_logits)) t_loss,t_acc=train_loss.result(),train_acc.result() train_loss.reset_states(),train_acc.reset_states() return{"loss":t_loss,"accuracy":t_acc}

如果你已經熟悉了如何在TensorFlow 2中定制一個訓練循環,那么train_step()函數應該是一個容易閱讀的函數。注意get_kd_loss() 函數。這可以是我們之前討論過的任何損失函數。我們在這里使用的是一個訓練過的教師模型,這個模型我們在前面進行了微調。通過這個訓練循環,我們可以創建一個可以通過.fit()調用進行訓練完整模型。

首先,創建一個擴展tf.keras.Model的類。

classStudent(tf.keras.Model): def__init__(self,trained_teacher,student): super(Student,self).__init__() self.trained_teacher=trained_teacher self.student=student

當你擴展tf.keras.Model 類的時候,可以將自定義的訓練邏輯放到train_step()函數中(由類提供)。所以,從整體上看,Student類應該是這樣的:

classStudent(tf.keras.Model): def__init__(self,trained_teacher,student): super(Student,self).__init__() self.trained_teacher=trained_teacher self.student=student deftrain_step(self,data): images,labels=data teacher_logits=self.trained_teacher(images) withtf.GradientTape()astape: student_logits=self.student(images) loss=get_kd_loss(teacher_logits,student_logits) gradients=tape.gradient(loss,self.student.trainable_variables) self.optimizer.apply_gradients(zip(gradients,self.student.trainable_variables)) train_loss.update_state(loss) train_acc.update_state(labels,tf.nn.softmax(student_logits)) t_loss,t_acc=train_loss.result(),train_acc.result() train_loss.reset_states(),train_acc.reset_states() return{"train_loss":t_loss,"train_accuracy":t_acc}

你甚至可以編寫一個test_step來自定義模型的評估行為。我們的模型現在可以用以下方式訓練:

student=Student(teacher_model,get_student_model()) optimizer=tf.keras.optimizers.Adam(learning_rate=0.01) student.compile(optimizer) student.fit(train_ds, validation_data=validation_ds, epochs=10)

這種方法的一個潛在優勢是可以很容易地合并其他功能,比如分布式訓練、自定義回調、混合精度等等。

使用訓練學生模型

用這個損失函數訓練我們的淺層學生模型,我們得到~74%的驗證精度。我們看到,在epochs 8之后,損失開始增加。這表明,加強正則化可能會有所幫助。另外,請注意,超參數調優過程在這里有重大影響。在我的實驗中,我沒有做嚴格的超參數調優。為了更快地進行實驗,我縮短了訓練時間。

使用

訓練學生模型

現在讓我們看看在蒸餾訓練目標中加入ground truth標簽是否有幫助。在β = 0.1和α = 0.1的情況下,我們得到了大約71%的驗證準確性。再次表明,更強的正則化和更長的訓練時間會有所幫助。

使用訓練學生模型

使用了MSE的損失,我們可以看到驗證精度大幅下降到~56%。同樣的損失也出現了類似的情況,這表明需要進行正則化。

請注意,這個損失函數是無界的,我們的淺學生模型可能無法處理隨之而來的噪音。讓我們嘗試一個更深入的學生模型。

在訓練學生模型的時候使用數據增強

如前所述,學生模式比教師模式的容量更小。在處理較少的數據時,數據增強可以幫助訓練學生模型。我們驗證一下。

數據增加的好處是非常明顯的:

我們有一個更好的損失曲線。

驗證精度提高到84%。

溫度(τ)的影響

在這個實驗中,我們研究溫度對學生模型的影響。在這個設置中,我使用了相同的淺層CNN。

從上面的結果可以看出,當τ為1時,訓練損失和訓練精度均優于其它方法。對于驗證損失,我們可以看到類似的行為,但是在所有不同的溫度下,驗證的準確性似乎幾乎是相同的。

最后,我想研究下微調基線模是否對學生模型有顯著影響。

基線模型調優的效果

在這次實驗中,我選擇了 EfficientNet B0作為基礎模型。讓我們先來看看我用它得到的微調結果。注意,如前所述,所有其他超參數都保持其默認值。

我們在微調步驟中沒有看到任何顯著的改進。我想再次強調,我沒有進行嚴格的超參數調優實驗。基于我從EfficientNet B0得到的邊際改進,我決定在以后的某個時間點進行進一步的實驗。

第一行對應的是用加權平均損失訓練的默認student model,其他行分別對應EfficientNet B0和MobileNetV2。注意,我沒有包括在訓練student模型時通過使用數據增強而得到的結果。

知識蒸餾的一個好處是,它與其他模型優化技術(如量化和修剪)無縫集成。所以,作為一個有趣的實驗,我鼓勵你們自己嘗試一下。

總結

知識蒸餾是一種非常有前途的技術,特別適合于用于部署的目的。它的一個優點是,它可以與量化和剪枝非常無縫地結合在一起,從而在不影響精度的前提下進一步減小生產模型的尺寸。

責任編輯:lq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 神經網絡
    +關注

    關注

    42

    文章

    4838

    瀏覽量

    107758
  • 數據集
    +關注

    關注

    4

    文章

    1236

    瀏覽量

    26191
  • Softmax
    +關注

    關注

    0

    文章

    9

    瀏覽量

    2814

原文標題:神經網絡中的蒸餾技術,從Softmax開始說起

文章出處:【微信號:zenRRan,微信公眾號:深度學習自然語言處理】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    鴻蒙智能體開發知識庫---創建知識

    。 從列表點擊知識庫名稱進入知識列表頁面 選擇對應的知識類型填寫相關信息: 導入方式-文檔:使用文檔形式導入知識數據,可以配置引用源
    發表于 03-06 10:18

    建設智慧教室,教學設備怎么選?

    在教育數字化轉型的浪潮中,智慧教室已成為提升教學效率、優化學習體驗的重要載體。建設智慧教室,教學設備怎么選?
    的頭像 發表于 01-29 17:52 ?231次閱讀
    建設智慧教室,<b class='flag-5'>教學</b>設備怎么選?

    國際學校網絡改造案例:SD-WAN如何保障在線教學與全球網絡流暢訪問

    前言在全球化教育與信息教學深度融合的今天,一流的國際學校不僅是知識的殿堂,更是高度依賴數字基礎設施的復雜組織。從上海到杭州,從實體課堂到云端資源,師生們的教學、研究與協作動線早已跨越
    的頭像 發表于 01-07 09:48 ?413次閱讀
    國際學校網絡改造案例:SD-WAN如何保障在線<b class='flag-5'>教學</b>與全球網絡流暢訪問

    應用案例 | 看清3000轉:深視智能高速相機的硬核教學實踐

    01高速運動的教學盲區在工程教育領域,高速運動過程的教學一直存在難以逾越的障礙。當電機轉速達到3000轉/分鐘,轉子上的標記點瞬間劃過,人眼根本無法捕捉其運動軌跡。這導致兩大教學難題:概念理解障礙
    的頭像 發表于 12-22 08:17 ?312次閱讀
    應用案例 | 看清3000轉:深視智能高速相機的硬核<b class='flag-5'>教學</b>實踐

    基于大模型教育教學應用創新賽圓滿收官

    近日,2025 第二屆教育信息技術應用創新大賽在杭州圓滿落幕。本屆大賽由中國教育技術協會主辦,浙江大學與中國教育技術協會網絡安全專業委員會聯合承辦。龍芯中科聯合太初元碁、誠邁科技發布 “基于大模型
    的頭像 發表于 11-27 15:20 ?656次閱讀

    智慧教室的教學設備和傳統教室有什么不同?

    智慧教室的建設是教育信息化的重要載體,通過物聯網、人工智能、大數據等技術深度融合,重構教學空間,提升課堂效率,優化教育資源配置。廣凌科技(廣凌股份)作為智慧教室整體解決方案的提供商,其方案涵蓋從硬件設備到軟件平臺的全鏈條配置。
    的頭像 發表于 11-21 17:02 ?737次閱讀
    智慧教室的<b class='flag-5'>教學</b>設備和傳統教室有什么不同?

    普源精電助力2025全國高校電子信息類專業課程實驗教學案例設計競賽圓滿舉行

    11月8日,由教育部高等學校電子信息類專業教學指導委員會、國家級實驗教學示范中心聯席會電子學科組、中國電子教育學會主辦,電子科技大學和西安電子科技大學承辦,普源精電科技股份有限公司協辦的2025
    的頭像 發表于 11-19 09:05 ?884次閱讀

    華清遠見嵌入式虛擬仿真實驗教學平臺及師資課程一體化建設方案

    脫節”的困局。然而,嵌入式教學本身仍面臨多重挑戰:軟硬件知識融合度高、知識體系復雜,系統化教學難度大;傳統教學高度依賴實物硬件,不僅采購與維
    的頭像 發表于 09-01 11:20 ?764次閱讀
    華清遠見嵌入式虛擬仿真實驗<b class='flag-5'>教學</b>平臺及師資課程一體化建設方案

    智慧教室如何讓智慧教學融入教室?

    在教育數字化轉型的浪潮中,智慧教室正從“概念”走向“實踐”,成為推動教學模式創新、提升教育質量的核心載體。通過硬件智能化、軟件平臺化、數據驅動化的深度融合,智慧教室不僅重構了傳統教學場景,更解決了傳統教室在設備孤島、教學效率低、
    的頭像 發表于 08-22 09:54 ?702次閱讀
    智慧教室如何讓智慧<b class='flag-5'>教學</b>融入教室?

    廣凌智慧教室場景應用:適配多元教學需求的定制化配置解析

    在教育信息化2.0時代,智慧教室的建設已從單一功能升級轉向場景化、個性化、生態化的深度融合。廣凌科技基于多年技術積累與實踐驗證,提出覆蓋“常態化教學、研討協作、精品錄播、遠程互動”等場景的定制化解決方案,通過“硬件+平臺+數據”的深度整合,為不同
    的頭像 發表于 07-18 10:00 ?549次閱讀
    廣凌智慧教室場景應用:適配多元<b class='flag-5'>教學</b>需求的定制化配置解析

    無限穿墻技術西安品茶工作室南郊北郊教學簡約網絡延遲

    不同步,導致學生們學習效果不佳。引入無限穿墻技術工作室的解決方案后,網絡延遲問題得到了顯著改善。老師能夠毫無阻礙地展示教學內容,與學生們實時互動,學生們也能清晰地接收知識,學習積極性明顯提高
    發表于 07-05 16:21

    匯編語言教學中文資料

    電子發燒友網站提供《匯編語言教學中文資料.rar》資料免費下載
    發表于 06-30 15:15 ?7次下載

    ModbusRTU轉EtherCAT網關:蒸餾裝置通信提速方案

    在現代工業自動化中,通信協議扮演著不可或缺的角色,它們負責將控制指令和數據信息在不同設備間準確傳遞。Modbus RTU和EtherCAT是兩種廣泛應用的工業通信協議,各自擁有獨特的特點與優勢。在常
    的頭像 發表于 06-26 18:29 ?380次閱讀

    高校智慧教室多媒體教學設備介紹

    在當今的教育環境中,隨著信息技術的快速發展和應用,智慧教室已成為高校教育改革的重要標志。廣凌科技(廣凌股份)深知在智慧教室建設方案中,多媒體教學設備的重要性,這不僅關系到教學質量的提升,也直接影響
    的頭像 發表于 05-06 09:20 ?1602次閱讀
    高校智慧教室多媒體<b class='flag-5'>教學</b>設備介紹

    物聯網賦能智慧教室:構建未來教學空間

    在現在這個教育信息化時代,物聯網(IoT)技術正成為智慧教室建設的核心驅動力。通過將傳感器、智能設備、網絡通信與教學場景深度融合,廣凌科技打造的物聯網智慧教室解決方案,實現了從設備管控到數據驅動的全鏈條智能化,為高校及教育機構構建了 “物聯互通、數據共享、智能高效” 的新
    的頭像 發表于 04-24 17:53 ?1498次閱讀
    物聯網賦能智慧教室:構建未來<b class='flag-5'>教學</b>空間