0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

深度學(xué)習(xí):知識(shí)蒸餾的全過(guò)程

深度學(xué)習(xí)自然語(yǔ)言處理 ? 來(lái)源:深度學(xué)習(xí)自然語(yǔ)言處理 ? 作者:LinT ? 2021-01-07 14:36 ? 次閱讀

知識(shí)蒸餾的核心思想是通過(guò)遷移知識(shí),從而通過(guò)訓(xùn)練好的大模型得到更加適合推理的小模型。本文作者介紹了知識(shí)蒸餾的全過(guò)程,以及引用Hinton等人的實(shí)驗(yàn)結(jié)果解釋說(shuō)明,并提出了知識(shí)蒸餾的一些延伸工作方向。

0. 寫在前面

有人說(shuō)過(guò):“神經(jīng)網(wǎng)絡(luò)用剩的logits不要扔,沾上雞蛋液,裹上面包糠...” 這兩天對(duì)知識(shí)蒸餾(Knowledge Distillation)萌生了一點(diǎn)興趣,正好寫一篇文章分享一下。這篇文章姑且算是一篇小科普。

1. 從模型壓縮開始

各種模型算法,最終目的都是要為某個(gè)應(yīng)用服務(wù)。在買賣中,我們需要控制收入和支出。類似地,在工業(yè)應(yīng)用中,除了要求模型要有好的預(yù)測(cè)(收入)以外,往往還希望它的「支出」要足夠小。具體來(lái)說(shuō),我們一般希望部署到應(yīng)用中的模型使用較少的計(jì)算資源(存儲(chǔ)空間、計(jì)算單元等),產(chǎn)生較低的時(shí)延。

深度學(xué)習(xí)的背景下,為了達(dá)到更好的預(yù)測(cè),常常會(huì)有兩種方案:1. 使用過(guò)參數(shù)化的深度神經(jīng)網(wǎng)絡(luò),這類網(wǎng)絡(luò)學(xué)習(xí)能力非常強(qiáng),因此往往加上一定的正則化策略(如dropout);2. 集成模型(ensemble),將許多弱的模型集成起來(lái),往往可以實(shí)現(xiàn)較好的預(yù)測(cè)。這兩種方案無(wú)疑都有較大的「支出」,需要的計(jì)算量和計(jì)算資源很大,對(duì)部署非常不利。這也就是模型壓縮的動(dòng)機(jī):我們希望有一個(gè)規(guī)模較小的模型,能達(dá)到和大模型一樣或相當(dāng)?shù)慕Y(jié)果。當(dāng)然,從頭訓(xùn)練一個(gè)小模型,從經(jīng)驗(yàn)上看是很難達(dá)到上述效果的,也許我們能先訓(xùn)練一個(gè)大而強(qiáng)的模型,然后將其包含的知識(shí)轉(zhuǎn)移給小的模型呢?如何做到呢?

* 下文統(tǒng)一將要訓(xùn)練的小模型稱為新模型,將以及訓(xùn)練的大模型稱為原模型。

Rich Caruana等人在[1]中指出,可以讓新模型近似(approximate)原模型(模型即函數(shù))。注意到,在機(jī)器學(xué)習(xí)中,我們常常假定輸入到輸出有一個(gè)潛在的函數(shù)關(guān)系,這個(gè)函數(shù)是未知的:從頭學(xué)習(xí)一個(gè)新模型就是從有限的數(shù)據(jù)中近似一個(gè)未知的函數(shù)。如果讓新模型近似原模型,因?yàn)樵P偷暮瘮?shù)是已知的,我們可以使用很多非訓(xùn)練集內(nèi)的偽數(shù)據(jù)來(lái)訓(xùn)練新模型,這顯然要更可行。

這樣,原來(lái)我們需要讓新模型的softmax分布與真實(shí)標(biāo)簽匹配,現(xiàn)在只需要讓新模型與原模型在給定輸入下的softmax分布匹配了。直觀來(lái)看,后者比前者具有這樣一個(gè)優(yōu)勢(shì):經(jīng)過(guò)訓(xùn)練后的原模型,其softmax分布包含有一定的知識(shí)——真實(shí)標(biāo)簽只能告訴我們,某個(gè)圖像樣本是一輛寶馬,不是一輛垃圾車,也不是一顆蘿卜;而經(jīng)過(guò)訓(xùn)練的softmax可能會(huì)告訴我們,它最可能是一輛寶馬,不大可能是一輛垃圾車,但絕不可能是一顆蘿卜[2]。

2. 為什么叫「蒸餾」?

接續(xù)前面的討論,我們的目標(biāo)是讓新模型與原模型的softmax輸出的分布充分接近。直接這樣做是有問(wèn)題的:在一般的softmax函數(shù)中,自然指數(shù) 先拉大logits之間的差距,然后作歸一化,最終得到的分布是一個(gè)arg max的近似 (參考我之前的文章:淺談Softmax函數(shù)),其輸出是一個(gè)接近one-hot的向量,其中一個(gè)值很大,其他的都很小。這種情況下,前面說(shuō)到的「可能是垃圾車,但絕不是蘿卜」這種知識(shí)的體現(xiàn)是非常有限的。相較類似one-hot這樣的硬性輸出,我們更希望輸出更「軟」一些。

一種方法是直接比較logits來(lái)避免這個(gè)問(wèn)題。具體地,對(duì)于每一條數(shù)據(jù),記原模型產(chǎn)生的某個(gè)logits是 ,新模型產(chǎn)生的logits是 ,我們需要最小化

文獻(xiàn)[2]提出了更通用的一種做法。考慮一個(gè)廣義的softmax函數(shù)

其中 是溫度,這是從統(tǒng)計(jì)力學(xué)中的玻爾茲曼分布中借用的概念。容易證明,當(dāng)溫度 趨向于0時(shí),softmax輸出將收斂為一個(gè)one-hot向量(證明可以參考我之前的文章:淺談Softmax函數(shù),將 替換為 即可);溫度 趨向于無(wú)窮時(shí),softmax的輸出則更「軟」。因此,在訓(xùn)練新模型的時(shí)候,可以使用較高的 使得softmax產(chǎn)生的分布足夠軟,這時(shí)讓新模型的softmax輸出近似原模型;在訓(xùn)練結(jié)束以后再使用正常的溫度 來(lái)預(yù)測(cè)。具體地,在訓(xùn)練時(shí)我們需要最小化兩個(gè)分布的交叉熵(Cross-entropy),記新模型利用公式 產(chǎn)生的分布是 ,原模型產(chǎn)生的分布是 ,則我們需要最小化

在化學(xué)中,蒸餾是一個(gè)有效的分離沸點(diǎn)不同的組分的方法,大致步驟是先升溫使低沸點(diǎn)的組分汽化,然后降溫冷凝,達(dá)到分離出目標(biāo)物質(zhì)的目的。在前面提到的這個(gè)過(guò)程中,我們先讓溫度升高,然后在測(cè)試階段恢復(fù)「低溫」,從而將原模型中的知識(shí)提取出來(lái),因此將其稱為是蒸餾,實(shí)在是妙。

當(dāng)然,如果轉(zhuǎn)移時(shí)使用的是有標(biāo)簽的數(shù)據(jù),那么也可以將標(biāo)簽與新模型softmax分布的交叉熵加入到損失函數(shù)中去。這里需要將式 乘上一個(gè) ,這是為了讓損失函數(shù)的兩項(xiàng)的梯度大致在一個(gè)數(shù)量級(jí)上(參考公式 ),實(shí)驗(yàn)表明這將大大改善新模型的表現(xiàn)(考慮到加入了更多的監(jiān)督信號(hào))。

3. 與直接優(yōu)化logits差異相比

由公式 ,對(duì)于交叉熵?fù)p失來(lái)說(shuō),其對(duì)于新模型的某個(gè)logit 的梯度是

由于 與 是等價(jià)無(wú)窮小(時(shí)**)**,易知,當(dāng) 充分大時(shí),有

假設(shè)所有l(wèi)ogits對(duì)每個(gè)樣本都是零均值化的,即 ,則有

所以,如果:1. 非常大,2. logits對(duì)所有樣本都是零均值化的,則知識(shí)蒸餾和最小化logits的平方差(公式 )是等價(jià)的(因?yàn)樘荻却笾率峭粋€(gè)形式)。實(shí)驗(yàn)表明,溫度 不能取太大,而應(yīng)該使用某個(gè)適中的值,這表明忽略極負(fù)的logits對(duì)新模型的表現(xiàn)很有幫助(較低的溫度產(chǎn)生的分布比較「硬」,傾向于忽略logits中極小的負(fù)值)。

4. 實(shí)驗(yàn)與結(jié)論

Hinton等人做了三組實(shí)驗(yàn),其中兩組都驗(yàn)證了知識(shí)蒸餾方法的有效性。在MNIST數(shù)據(jù)集上的實(shí)驗(yàn)表明,即便有部分類別的樣本缺失,新模型也可以表現(xiàn)得很不錯(cuò),只需要修改相應(yīng)的偏置項(xiàng),就可以與原模型表現(xiàn)相當(dāng)。在語(yǔ)音任務(wù)的實(shí)驗(yàn)也表明,蒸餾得到的模型比從頭訓(xùn)練的模型捕捉了更多數(shù)據(jù)集中的有效信息,表現(xiàn)僅比集成模型低了0.3個(gè)百分點(diǎn)??傮w來(lái)說(shuō)知識(shí)蒸餾是一個(gè)簡(jiǎn)單而有效的模型壓縮/訓(xùn)練方法。這大體上是因?yàn)樵P偷膕oftmax提供了比one-hot標(biāo)簽更多的監(jiān)督信號(hào)[3]。

知識(shí)蒸餾在后續(xù)也有很多延伸工作。在NLP方面比較有名的有Yoon Kim等人的Sequence-Level Knowledge Distillation 等??偟膩?lái)說(shuō),對(duì)一些比較臃腫、不便部署的模型,可以將其「知識(shí)」轉(zhuǎn)移到小的模型上。比如,在機(jī)器翻譯中,一般的模型需要有較大的容量(capacity)才可能獲得較好的結(jié)果;現(xiàn)在非常流行的BERT及其變種,規(guī)模都非常大;更不用提,一些情形下我們需要將這些本身就很大的深度模型集成為一個(gè)ensemble,這時(shí)候,可以用知識(shí)蒸餾壓縮出一個(gè)較小的、「便宜」的模型。

文章地址:https://arxiv.org/abs/1606.07947

另外,在多任務(wù)的情境下,使用一般的策略訓(xùn)練一個(gè)多任務(wù)模型,可能達(dá)不到比單任務(wù)更好的效果,文獻(xiàn)[3]探索了使用知識(shí)蒸餾,利用單任務(wù)的模型來(lái)指導(dǎo)訓(xùn)練多任務(wù)模型的方法,很值得參考。

補(bǔ)充

鑒于評(píng)論區(qū)有知友對(duì)公式 有疑問(wèn),簡(jiǎn)單補(bǔ)充一下這里梯度的推導(dǎo)(其實(shí)就是交叉熵?fù)p失對(duì)softmax輸入的梯度,LOL)。

* 這部分有一點(diǎn)繁瑣,能接受公式 的讀者可以跳過(guò)。

由鏈?zhǔn)椒▌t,有

注意到 是原模型產(chǎn)生的softmax輸出,與 無(wú)關(guān)。

后一項(xiàng) 比較容易得到,因?yàn)?,所以

則 是一個(gè) 維向量

前一項(xiàng) 是一個(gè) 的方陣,分類討論可以得到。參考公式 ,記 ,由除法的求導(dǎo)法則,輸出元素 對(duì)輸入 的偏導(dǎo)是

注意上面右側(cè)加方框部分,可以進(jìn)一步展開

這樣,代入公式 ,并且將括號(hào)展開,可以得到

左側(cè)方框內(nèi)偏導(dǎo)可以分類討論得到

帶入式 ,得到

所以 形式如下

代入式 ,可得

所以有公式 , 。

參考

[1] Caruana et al., Model Compression, 2006

[2] Hinton et al., Distilling the Knowledge in a Neural Network, 2015

[3] Kevin Clark et al., BAM! Born-Again Multi-Task Networks for Natural Language Understanding

責(zé)任編輯:xj

原文標(biāo)題:知識(shí)蒸餾是什么?一份入門隨筆

文章出處:【微信公眾號(hào):深度學(xué)習(xí)自然語(yǔ)言處理】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 神經(jīng)網(wǎng)絡(luò)

    關(guān)注

    42

    文章

    4717

    瀏覽量

    100010
  • 模型
    +關(guān)注

    關(guān)注

    1

    文章

    3032

    瀏覽量

    48361
  • 深度學(xué)習(xí)
    +關(guān)注

    關(guān)注

    73

    文章

    5422

    瀏覽量

    120593

原文標(biāo)題:知識(shí)蒸餾是什么?一份入門隨筆

文章出處:【微信號(hào):zenRRan,微信公眾號(hào):深度學(xué)習(xí)自然語(yǔ)言處理】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    天合光能獲“全過(guò)程功率測(cè)量控制評(píng)估認(rèn)證”證書

    ? 近期,天合光能成為首批獲得鑒衡認(rèn)證中心“光伏組件制造商全過(guò)程功率測(cè)量控制評(píng)估認(rèn)證”證書的光伏企業(yè)之一,其卓越的質(zhì)量控制流程和功率測(cè)試穩(wěn)定性再次獲得業(yè)內(nèi)權(quán)威認(rèn)可,充分展現(xiàn)了天合光能強(qiáng)大的制造能力
    的頭像 發(fā)表于 07-15 17:15 ?513次閱讀

    紅豆Cat 1開源 項(xiàng)目四: 從0-1設(shè)計(jì)一款TCP版本DTU產(chǎn)品的軟硬件全過(guò)程

    定義、硬件設(shè)計(jì)分析、軟件設(shè)計(jì)分析,并詳細(xì)講解單一功能點(diǎn)功能模塊的驗(yàn)證過(guò)程和測(cè)試驗(yàn)證方法。通過(guò)學(xué)習(xí)本內(nèi)容,初學(xué)者可以在 1-2 天內(nèi)完成一款 Cat 1 DTU產(chǎn)品的開發(fā)全過(guò)程,快速提升物聯(lián)網(wǎng)產(chǎn)品開發(fā)的實(shí)踐能力。本文也是紅豆開源產(chǎn)
    的頭像 發(fā)表于 07-12 14:43 ?187次閱讀
    紅豆Cat 1開源 項(xiàng)目四: 從0-1設(shè)計(jì)一款TCP版本DTU產(chǎn)品的軟硬件<b class='flag-5'>全過(guò)程</b>

    紅豆Cat 1開源 項(xiàng)目三: 從0-1設(shè)計(jì)一款HTTP版本RTU 支持GNSS 產(chǎn)品的軟硬件全過(guò)程

    、硬件設(shè)計(jì)分析、軟件設(shè)計(jì)分析,并詳細(xì)講解單一功能點(diǎn)功能模塊的驗(yàn)證過(guò)程和測(cè)試驗(yàn)證方法。通過(guò)學(xué)習(xí)本內(nèi)容,初學(xué)者可以在 1-2 天內(nèi)完成一款 Cat 1 產(chǎn)品的開發(fā)全過(guò)程,快速提升物聯(lián)網(wǎng)產(chǎn)品開發(fā)的實(shí)踐能力。本文也是紅豆開源產(chǎn)品的一個(gè)實(shí)
    的頭像 發(fā)表于 07-12 14:31 ?173次閱讀
    紅豆Cat 1開源 項(xiàng)目三: 從0-1設(shè)計(jì)一款HTTP版本RTU 支持GNSS 產(chǎn)品的軟硬件<b class='flag-5'>全過(guò)程</b>

    紅豆Cat 1開源 項(xiàng)目二: 從0-1設(shè)計(jì)一款MQTT版本DTU 支持GNSS 產(chǎn)品的軟硬件全過(guò)程

    的軟硬件定義、硬件設(shè)計(jì)分析、軟件設(shè)計(jì)分析,并詳細(xì)講解單一功能點(diǎn)功能模塊的驗(yàn)證過(guò)程和測(cè)試驗(yàn)證方法。通過(guò)學(xué)習(xí)本內(nèi)容,初學(xué)者可以在 1-2 天內(nèi)完成一款 Cat 1 DTU產(chǎn)品的開發(fā)全過(guò)程,快速提升物聯(lián)網(wǎng)產(chǎn)品開發(fā)的實(shí)踐能力。本文也是紅
    的頭像 發(fā)表于 07-12 14:30 ?185次閱讀
    紅豆Cat 1開源 項(xiàng)目二: 從0-1設(shè)計(jì)一款MQTT版本DTU 支持GNSS 產(chǎn)品的軟硬件<b class='flag-5'>全過(guò)程</b>

    紅豆Cat 1開源 項(xiàng)目一: 從0-1設(shè)計(jì)一款TCP版本RTU 支持Modbus+GNSS 產(chǎn)品的軟硬件全過(guò)程

    的軟硬件定義、硬件設(shè)計(jì)分析、軟件設(shè)計(jì)分析,并詳細(xì)講解單一功能點(diǎn)功能模塊的驗(yàn)證過(guò)程和測(cè)試驗(yàn)證方法。通過(guò)學(xué)習(xí)本內(nèi)容,初學(xué)者可以在 1-2 天內(nèi)完成一款 Cat 1 產(chǎn)品的開發(fā)全過(guò)程,快速提升物聯(lián)網(wǎng)產(chǎn)品開發(fā)的實(shí)踐能力。本文也是紅豆開源
    的頭像 發(fā)表于 07-10 17:36 ?266次閱讀
    紅豆Cat 1開源 項(xiàng)目一: 從0-1設(shè)計(jì)一款TCP版本RTU 支持Modbus+GNSS 產(chǎn)品的軟硬件<b class='flag-5'>全過(guò)程</b>

    解讀PyTorch模型訓(xùn)練過(guò)程

    PyTorch作為一個(gè)開源的機(jī)器學(xué)習(xí)庫(kù),以其動(dòng)態(tài)計(jì)算圖、易于使用的API和強(qiáng)大的靈活性,在深度學(xué)習(xí)領(lǐng)域得到了廣泛的應(yīng)用。本文將深入解讀PyTorch模型訓(xùn)練的全過(guò)程,包括數(shù)據(jù)準(zhǔn)備、模型
    的頭像 發(fā)表于 07-03 16:07 ?543次閱讀

    深度學(xué)習(xí)模型訓(xùn)練過(guò)程詳解

    詳細(xì)介紹深度學(xué)習(xí)模型訓(xùn)練的全過(guò)程,包括數(shù)據(jù)預(yù)處理、模型構(gòu)建、損失函數(shù)定義、優(yōu)化算法選擇、訓(xùn)練過(guò)程以及模型的評(píng)估與調(diào)優(yōu)。
    的頭像 發(fā)表于 07-01 16:13 ?488次閱讀

    精準(zhǔn)到毫米:H9激光切管機(jī)鋁材切割與打孔全過(guò)程解析

    H9激光切管機(jī)在鋁材切割與打孔的全過(guò)程包括設(shè)定參數(shù)、啟動(dòng)切割、監(jiān)控質(zhì)量、完成取件和檢查效果等。H9激光切管機(jī)鋁材切割與打孔的全過(guò)程可以詳細(xì)解析如下:一、操作準(zhǔn)備檢查H9激光切管機(jī)各部件是否齊全,并
    的頭像 發(fā)表于 06-20 11:14 ?289次閱讀
    精準(zhǔn)到毫米:H9激光切管機(jī)鋁材切割與打孔<b class='flag-5'>全過(guò)程</b>解析

    物聯(lián)網(wǎng)與醫(yī)療廢物處置全過(guò)程電子信息化跟蹤管理系統(tǒng)研究

    與醫(yī)療廢物處置全過(guò)程電子信息化跟蹤管理系統(tǒng)(以下簡(jiǎn)稱“醫(yī)廢跟蹤管理系統(tǒng)”)的研發(fā)理念、技術(shù)構(gòu)成、功能特性及其在實(shí)際應(yīng)用中的成效,尤其是翼思維醫(yī)廢收運(yùn)管理系統(tǒng)的作業(yè)流程。 1. 研發(fā)理念與技術(shù)構(gòu)成 醫(yī)廢跟蹤管理系統(tǒng)的
    的頭像 發(fā)表于 04-01 16:14 ?443次閱讀

    永磁同步電機(jī)全速域矢量控制的全過(guò)程介紹

    一直都想知道永磁同步電機(jī)的轉(zhuǎn)速?gòu)牧阍黾拥綐O限這個(gè)過(guò)程會(huì)發(fā)生什么,這篇文章介紹一下永磁同步電機(jī)全速域矢量控制的全過(guò)程,即電機(jī)的轉(zhuǎn)速?gòu)牧汩_始逐漸增加,如何設(shè)計(jì)電流環(huán)電流使得電機(jī)輸出恒定轉(zhuǎn)矩,且保持轉(zhuǎn)速穩(wěn)定。
    的頭像 發(fā)表于 03-15 09:29 ?999次閱讀
    永磁同步電機(jī)全速域矢量控制的<b class='flag-5'>全過(guò)程</b>介紹

    用C語(yǔ)言開發(fā)DSP系統(tǒng)全過(guò)程

    電子發(fā)燒友網(wǎng)站提供《用C語(yǔ)言開發(fā)DSP系統(tǒng)全過(guò)程.pdf》資料免費(fèi)下載
    發(fā)表于 11-18 10:57 ?0次下載
    用C語(yǔ)言開發(fā)DSP系統(tǒng)<b class='flag-5'>全過(guò)程</b>

    用C語(yǔ)言開發(fā)DSP系統(tǒng)的全過(guò)程講解

    電子發(fā)燒友網(wǎng)站提供《用C語(yǔ)言開發(fā)DSP系統(tǒng)的全過(guò)程講解.pdf》資料免費(fèi)下載
    發(fā)表于 11-18 10:53 ?0次下載
    用C語(yǔ)言開發(fā)DSP系統(tǒng)的<b class='flag-5'>全過(guò)程</b>講解

    RT-Thread啟動(dòng)進(jìn)入就緒態(tài)最高優(yōu)先級(jí)線程的全過(guò)程與棧幀分析(上)

    本文簡(jiǎn)單討論RT-Thread在啟動(dòng)后,逐步進(jìn)入到處于就緒態(tài)最高優(yōu)先級(jí)main線程的全過(guò)程。部分內(nèi)容涉及到匯編指令,但通俗易懂。
    的頭像 發(fā)表于 11-08 12:47 ?1050次閱讀
    RT-Thread啟動(dòng)進(jìn)入就緒態(tài)最高優(yōu)先級(jí)線程的<b class='flag-5'>全過(guò)程</b>與棧幀分析(上)

    任意模型都能蒸餾!華為諾亞提出異構(gòu)模型的知識(shí)蒸餾方法

    相比于僅使用logits的蒸餾方法,同步使用模型中間層特征進(jìn)行蒸餾的方法通常能取得更好的性能。然而在異構(gòu)模型的情況下,由于不同架構(gòu)模型對(duì)特征的不同學(xué)習(xí)偏好,它們的中間層特征往往具有較大的差異,直接將針對(duì)同架構(gòu)模型涉及的
    的頭像 發(fā)表于 11-01 16:18 ?781次閱讀
    任意模型都能<b class='flag-5'>蒸餾</b>!華為諾亞提出異構(gòu)模型的<b class='flag-5'>知識(shí)</b><b class='flag-5'>蒸餾</b>方法

    屏幕式聲光電子琴制作全過(guò)程

    電子發(fā)燒友網(wǎng)站提供《屏幕式聲光電子琴制作全過(guò)程.pdf》資料免費(fèi)下載
    發(fā)表于 10-10 10:55 ?0次下載
    屏幕式聲光電子琴制作<b class='flag-5'>全過(guò)程</b>