版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
深度神經(jīng)網(wǎng)絡全面概述從基本概念到實際模型和硬件基礎深度神經(jīng)網(wǎng)絡(DNN)所代表的人工智能技術被認為是這一次技術變革的基石(之一)。近日,由IEEEFellowJoelEmer領導的一個團隊發(fā)布了一篇題為《深度神經(jīng)網(wǎng)絡的有效處理:教程和調(diào)研(EfficientProcessingofDeepNeuralNetworks:ATutorialandSurvey)》的綜述論文,從算法、模型、硬件和架構等多個角度對深度神經(jīng)網(wǎng)絡進行了較為全面的梳理和總結。鑒于該論文的篇幅較長,機器之心在此文中提煉了原論文的主干和部分重要內(nèi)容。目前,包括計算機視覺、語音識別和機器人在內(nèi)的諸多人工智能應用已廣泛使用了深度神經(jīng)網(wǎng)絡(deepneuralnetworks,DNN)。DNN在很多人工智能任務之中表現(xiàn)出了當前最佳的準確度,但同時也存在著計算復雜度高的問題。因此,那些能幫助DNN高效處理并提升效率和吞吐量,同時又無損于表現(xiàn)準確度或不會增加硬件成本的技術是在人工智能系統(tǒng)之中廣泛部署DNN的關鍵。論文地址:pdf/本文旨在提供一個關于實現(xiàn)DNN的有效處理(efficientprocessing)的目標的最新進展的全面性教程和調(diào)查。特別地,本文還給出了一個DNN綜述——討論了支持DNN的多種平臺和架構,并強調(diào)了最新的有效處理的技術的關鍵趨勢,這些技術或者只是通過改善硬件設計或者同時改善硬件設計和網(wǎng)絡算法以降低DNN計算成本。本文也會對幫助研究者和從業(yè)者快速上手DNN設計的開發(fā)資源做一個總結,并凸顯重要的基準指標和設計考量以評估數(shù)量快速增長的DNN硬件設計,還包括學界和產(chǎn)業(yè)界共同推薦的算法聯(lián)合設計。讀者將從本文中了解到以下概念:理解DNN的關鍵設計考量;通過基準和對比指標評估不同的DNN硬件實現(xiàn);理解不同架構和平臺之間的權衡;評估不同DNN有效處理技術的設計有效性;理解最新的實現(xiàn)趨勢和機遇。一、導語深度神經(jīng)網(wǎng)絡(DNN)目前是許多人工智能應用的基礎[1]。由于DNN在語音識別[2]和圖像識別[3]上的突破性應用,使用DNN的應用量有了爆炸性的增長。這些DNN被部署到了從自動駕駛汽車[4]、癌癥檢測[5]到復雜游戲[6]等各種應用中。在這許多領域中,DNN能夠超越人類的準確率。而DNN的出眾表現(xiàn)源于它能使用統(tǒng)計學習方法從原始感官數(shù)據(jù)中提取高層特征,在大量的數(shù)據(jù)中獲得輸入空間的有效表征。這與之前使用手動提取特征或專家設計規(guī)則的方法不同。然而DNN獲得出眾準確率的代價是高計算復雜性成本。雖然通用計算引擎(尤其是GPU),已經(jīng)成為許多DNN處理的砥柱,但提供對DNN計算更專門化的加速方法也越來越熱門。本文的目標是提供對DNN、理解DNN行為的各種工具、有效加速計算的各項技術的概述。該論文的結構如下:SectionII給出了DNN為什么很重要的背景、歷史和應用。SectionIII給出了DNN基礎組件的概述,還有目前流行使用的DNN模型。SectionIV描述了DNN研發(fā)所能用到的各種資源。SectionV描述了處理DNN用到的各種硬件平臺,以及在不影響準確率的情況下改進吞吐量(thoughtput)和能量的各種優(yōu)化方法(即產(chǎn)生bit-wiseidentical結果)。SectionVI討論了混合信號回路和新的存儲技術如何被用于近數(shù)據(jù)處理(near-dataprocessing),從而解決DNN中數(shù)據(jù)流通時面臨的吞吐量和能量消耗難題。SectionVII描述了各種用來改進DNN吞吐量和能耗的聯(lián)合算法和硬件優(yōu)化,同時最小化對準確率的影響。SectionVIII描述了對比DNN設計時應該考慮的關鍵標準。二、深度神經(jīng)網(wǎng)絡(DNN)的背景在這一部分,我們將描述深度神經(jīng)網(wǎng)絡(DNN)在人工智能這個大框架下的位置,以及一些促進其發(fā)展的的概念。我們還將對其主要的發(fā)展歷程和現(xiàn)階段主要的應用領域做一個簡單的介紹。1.人工智能和深度神經(jīng)網(wǎng)絡根據(jù)JohnMcCarthy的論述,深度神經(jīng)網(wǎng)絡(也稱為深度學習)是人工智能(AI)大框架下的一部分。而人工智能(AI)是利用科學與工程學創(chuàng)造具有如同人類那樣能實現(xiàn)目標的智能機器。人工智能這個詞就是這位計算機科學家在上個世紀50年代所創(chuàng)造出的。深度學習和整個人工智能的關系就如下圖所示。圖1:深度學習在人工智能大框架下的位置2.神經(jīng)網(wǎng)絡和深度神經(jīng)網(wǎng)絡(DNN)神經(jīng)網(wǎng)絡從神經(jīng)元涉及對輸入值求加權和進行計算這一概念而獲得靈感。這些加權和對應于突觸完成值的縮放以及其和神經(jīng)元值間的組合。此外,因為計算與神經(jīng)元級聯(lián)相關聯(lián),并且其為簡單線性代數(shù)的運算,所以神經(jīng)元不會僅僅輸出加權和。相反,在神經(jīng)元中有函數(shù)執(zhí)行組合輸入的運算,而這種函數(shù)應該是非線性運算。在非線性運算的過程中,神經(jīng)元只有在輸入超過一定閥值時才生成輸出。因此通過類比,神經(jīng)網(wǎng)絡將非線性函數(shù)運用到輸入值的加權和中。我們等一下會描述一些非線性函數(shù)。圖2:簡單的神經(jīng)網(wǎng)絡例子。(a)神經(jīng)元和突觸,(b)為每一層計算加權和,(c)前向和反向(循環(huán))網(wǎng)絡,(d)全連接與稀疏(a)中展示了計算神經(jīng)網(wǎng)絡的示意圖。圖的前端是輸入層,該層會接受輸入數(shù)據(jù)值。這些數(shù)據(jù)值前向傳播到神經(jīng)網(wǎng)絡中間層的神經(jīng)元中,中間層也常稱為神經(jīng)網(wǎng)絡的隱藏層。一個或多個隱藏層的加權和最終前向傳播到輸出層,該輸出層會最終向用戶呈現(xiàn)神經(jīng)網(wǎng)絡的輸出結果。為了將腦啟發(fā)的術語和神經(jīng)網(wǎng)絡相匹配,神經(jīng)元的輸出通常稱為激活(activation),并且突觸如(a)所示通常稱為權重(weight)。在上方表達式中,W_ij代表著權重、x_i為輸入激活、y_i是輸出激活,而f(·)就代表著在III-2中描述的非線性激活函數(shù)。在神經(jīng)網(wǎng)絡的領域內(nèi),有一門稱為深度學習的研究。普通神經(jīng)網(wǎng)絡基本上層級不會很多,而在深度學習里,神經(jīng)網(wǎng)絡的層級數(shù)量十分巨大,現(xiàn)如今基本上神經(jīng)網(wǎng)絡可以達到5到1000多層。3.推理vs訓練這一節(jié)中,如圖4所示,我們將把圖像分類用作訓練DNN的一個強勁的實例。評估DNN時,我們輸入一個圖像,DNN為每一個對象分類輸出分值向量;分值最高的分類將成為圖像中最有可能的對象分類。訓練DNN的總體目標是決定如何設置權重以最大化正確分類(來自標注的訓練數(shù)據(jù))的分值并最小化其他不正確分類的分值。理想的正確分值與DNN基于其當前權重計算的分值之間的差被稱為損失值(L)。因此訓練DNN的目標是找到一組權重以最小化大型數(shù)據(jù)集中的平均損失值。圖4:圖像分類任務4.開發(fā)歷史1940年代-神經(jīng)網(wǎng)絡被提出1960年代-深度神經(jīng)網(wǎng)絡被提出1989年-識別數(shù)字的神經(jīng)網(wǎng)(LeNet)出現(xiàn)1990年代-淺層神經(jīng)網(wǎng)硬件出現(xiàn)(IntelETANN)2011年-DNN語音識別取得突破性進展(Microsoft)2012年-用于視覺的DNN開始替代人工放大(AlexNet)2014年+-DNN加速器研究興起(Neuflow、DianNao等等)圖5的表柱是這些年來ImageNet競賽中每屆冠軍的表現(xiàn)。你可以看到最初算法精確度的錯誤率在25%或更多。2012年,多倫多大學的AlexNet團隊通過GPU來提升其計算能力并采用深度神經(jīng)網(wǎng)絡方法,把錯誤率降低了近10%[3]。他們的成功帶來了深度學習風格的算法的井噴,以及圖像識別技術的持續(xù)進步。圖5:ImageNet競賽[10]結果5.DNN的應用從多媒體到醫(yī)療,DNN對很多應用大有裨益。在這一節(jié)中,我們將展示DNN正在發(fā)揮影響的領域,并凸顯DNN有望在未來發(fā)揮作用的新興領域。圖像和視頻語音和語言醫(yī)療游戲機器人6.嵌入vs云執(zhí)行DNN推斷處理的嵌入平臺有著嚴格的能耗、計算和存儲成本限制。當DNN推斷在云中執(zhí)行時,語音識別等應用經(jīng)常有強烈的延遲需求。因此,在本文中,我們將聚焦于推斷處理而不是訓練的計算需求。三、深度神經(jīng)網(wǎng)絡概述根據(jù)應用情況不同,深度神經(jīng)網(wǎng)絡的形態(tài)和大小也各異。流行的形態(tài)和大小正快速演化以提升模型準確性和效率。所有深度神經(jīng)網(wǎng)絡的輸入是一套表征網(wǎng)絡將加以分析處理的信息的值。這些值可以是一張圖片的像素,或者一段音頻的樣本振幅或者某系統(tǒng)或者游戲狀態(tài)的數(shù)字化表示。處理輸入的網(wǎng)絡有兩種主要形式:前饋以及循環(huán)(圖2c)。前饋網(wǎng)絡中,所有計算都是在前一層輸出基礎上進行的一系列運作。最終一組運行就是網(wǎng)絡的輸出,比如,這張圖片包括某個特定物體的概率是多少,某段音頻出現(xiàn)某個單詞的概率是多少,或者下一步行動的建議等。在這類深度神經(jīng)網(wǎng)絡中,網(wǎng)絡并無記憶,輸出也總是與之前網(wǎng)絡輸入順序無關。相反,循環(huán)網(wǎng)絡(LSTM是一個很受歡迎的變種)是有內(nèi)在記憶的,允許長期依存關系影響輸出。在這些網(wǎng)絡中,一些中間運行生成的值會被存儲于網(wǎng)絡中,也被用作與處理后一輸入有關的其他運算的輸入。在這篇文章中,我們關注的是前饋網(wǎng)絡,因為到目前為止,少有人關注硬件加速,特別是循環(huán)網(wǎng)絡的。深度神經(jīng)網(wǎng)絡也可以是全連接的(FC,也指多層感知器),如圖2(d)最左部分所示。在一個全連接層中,所有輸出與所有輸入都是相連接的。這需要相當數(shù)量的存儲和計算空間。謝天謝地,在許多應用中,我們可以移除激活(activations)之間的一些連接,方法就是將權重設置為零而不影響準確性。結果會產(chǎn)生一個稀疏連接層。圖2(d)最右端的層就是一個稀疏連接層。通過限制對結果有影響的權重數(shù)量,我們也可以實現(xiàn)更高效的計算。如果每個輸出僅僅是一個固定大小輸入窗口的函數(shù),就會出現(xiàn)這類結構化稀疏性。如果這套權重被用于每一個輸入計算,就會進一步提高效率。這一權重共享能顯著降低權重的存儲要求。通過將計算構建為卷積,一種非常流行的窗口式的權重共享的網(wǎng)絡誕生了,如圖6(a)所示,其僅使用少量臨近的激活來計算加權和的輸出(即,該過濾器有一個有限的接受域,與輸入的距離超過特定值的所有權重都將被設置為0),而且這一套權重能被每個輸入共享來計算(即,濾波器是空間不變的)。這種結構稀疏性的形式正交于源自網(wǎng)絡(修改情況如本文部分VII-B2所述)的稀疏性。所以,卷積神經(jīng)網(wǎng)絡就是一種受歡迎的深度神經(jīng)網(wǎng)絡形式。1.卷積神經(jīng)網(wǎng)絡(CNN)圖6:卷積的維度。(a)傳統(tǒng)圖像處理中的二維卷積,(b)CNN中的高維卷積圖7:卷積神經(jīng)網(wǎng)絡表1:CONV/FC層的形狀參數(shù)給定表I中的形狀參數(shù)(shapeparameters),卷積層的計算可以定義為:2.非線性(Non-Linearity)圖8:多種形式的非線性激活函數(shù)(來自CaffeTutorial[43])3.池化(Pooling)圖9:多種形式的池化(來自CaffeTutorial[43])4.歸一化(Normalization)控制輸入在層級中的分布能顯著地加快訓練速度并提升準確度。因此,輸入激活在層級上的分布(σ,μ)需要歸一化處理,使其變換為均值為0、標準差為1的分布。在批量歸一化(batchnormalization)中,歸一化值如方程(2)所示將進一步縮放和平移,參數(shù)(γ,β)是從訓練[44]中學到的兩個小常數(shù),它們能避免數(shù)值問題。(1)流行的DNN模型在過去的二十多年里出現(xiàn)了很多種DNN模型。每一種都稱其擁有不同的「網(wǎng)絡架構」,因為他們依據(jù)不同層級數(shù)量、濾波器形狀(如過濾尺寸,濾波器和通道的數(shù)量)、層級類型以及連接方式而劃分。正確地理解這些不同的方法和它們發(fā)展的趨勢對于提高DNN引擎的效率至關重要。其中包括:LeNet[9]于1989年提出,是最早的CNN方式之一。其中最為人熟知的是第八版的LeNet-5,其中包含兩個卷積層和兩個全連接層[45]。AlexNet[3]是第一次贏得ImageNet挑戰(zhàn)賽的CNN網(wǎng)絡(2012年)。它由五個卷積層和三個全連接層組成。Overfeat[46]與AlexNet具有非常相似的架構:五個卷積層和三個全連接層。VGG-16[47]更進一步,使用了16層的深度神經(jīng)網(wǎng)絡,其中包含13個卷積層,3個全連接層。GoogLeNet[48]更深,有22個層,它首次引入了起始模塊(見下圖)。ResNet[11],即殘差網(wǎng)絡(ResidualNet),使用殘差連接可以讓層級更加深入(34層以上)。該網(wǎng)絡第一次讓DNN在ImageNet挑戰(zhàn)賽中的表現(xiàn)超過了人類,top-5錯誤率在5%以下。圖11:GoogleNet[48]的起始模塊(Inceptionmodule)通道長度實例,其中每個CONV層在ReLU層之后(圖中未顯示)。圖12:ResNet[11]中的快捷模塊。其中最后一個CONV層之后的ReLU層被快捷連接。表2:目前流行的DNN[3,11,45,47,48]模型,其中正確率都基于在ImageNet[10]中TOP-5誤差。四、DNN開發(fā)資源DNN得以快速發(fā)展的一個關鍵因素是研究社區(qū)與產(chǎn)業(yè)界使得一系列開發(fā)資源變得可用。這些資源對DNN加速器的開發(fā)也很關鍵,提供工作負載的特性、在模型復雜性和準確率上促進權衡性的探索。這一章節(jié)將描述了對此領域感興趣的人能快速上手的一些資源。1.框架(Frameworks)為了DNN開發(fā)的簡便以及讓訓練網(wǎng)絡可共享,不同的團隊開發(fā)出了不同的深度學習框架。這些開源庫包含了面向DNN的軟件庫。Caffe在2014年由UC伯克利大學開源,它支持C、C++、Python和MATLAB。TensorFlow由谷歌團隊2015年開源,支持C++和Python,也支持多CPU和GPU。它要比Caffe更靈活,計算表達是數(shù)據(jù)流圖到張量管理(多維度陣列)。另一個流行的框架是Torch,由Facebook和NYU開發(fā),它支持C、C++和Lua。當然,還有其他的一些框架,比如Theano、MXNet、CNTK,這在[57]中有所描述。這些框架的存在不只是方便了DNN研究人員和應用設計者,它們對編程高性能或更高效的DNN計算引擎也是無價的。例如,大部分框架可以使用英偉達的cuDNN庫在GPU上進行快速運算。這一加速對框架的使用者而言是很明顯的。類似地,硬件加速器這種如此易懂的結合也能在Eyeriss這樣的芯片上獲得[58]。最終,這些框架對硬件研究人員來說也是無價的資源(工作負載),它們可被用于設計不同工作負載的實驗、性能分析(profiling)不同的工作負載、探索硬件與軟件之間的權衡。2.模型(Model)3.流行的分類數(shù)據(jù)集在許多公開的數(shù)據(jù)集中有許多人工智能任務可用來評估DNN的準確率。公開數(shù)據(jù)集對對比不同方法的準確率而言非常的重要。最簡單也最常見的任務是圖像分類。圖像分類涉及到在給定的完整圖像中,選擇出N類物體中的1類,它不需要進行定位于檢測。其中包括:MNIST:它包含手寫數(shù)字的28×28像素的灰度圖像,里面有10大類別(10個數(shù)字)、6萬張訓練圖像和1萬張測試圖像。CIFAR:這是一個包含不同物體32×32像素的彩色圖像數(shù)據(jù)集。ImageNet:它包含的圖像是256×256彩色像素,有1000多類。圖13:MNIST數(shù)據(jù)集(10類、6萬張訓練圖像、1萬張測試圖像)[59]vs.ImageNet數(shù)據(jù)集(1000多類、130萬張訓練圖像、10萬張測試圖像)[10]4.用于其它任務的數(shù)據(jù)集五、用于DNN處理的硬件在這部分里,我們將討論在不同的硬件平臺中進行高效處理而不降低準確性的策略(所有在本節(jié)中的方法都要輸出完全相同的結果)。對于CPU與GPU這樣的時間敏感架構,我們將討論在它們的運行中如何減少乘法次數(shù)以增加吞吐量。對于加速器這樣的空間敏感架構,我們討論數(shù)據(jù)流如何能低成本地從存儲器中被調(diào)用,以減少能耗。圖14:高度并行的計算范式1.在CPU和GPU平臺上加速核(kernel)計算圖15:映射到全連接層(a)的矩陣乘法,當從單個輸入特征圖計算單個輸出特征圖時,使用矩陣向量乘法。(b)當從N個輸入特征圖計算N個輸出特征圖時,使用矩陣乘法。圖16:映射到卷積層的矩陣乘法(a)將卷積映射到Toeplitz矩陣。(b)將Toeplitz矩陣擴展到多個通道和濾波器。圖17:用于加速DNN的FFT。2.為加速器設計的Energy-EfficientDataflow圖18:每個MAC的存取圖19:存儲層級和數(shù)據(jù)移動能量圖20:DNN中的數(shù)據(jù)復用機會圖22:DNN的數(shù)據(jù)流。(a)權重固定(WS),(b)輸出固定(OS),(c)沒有局部復用(NLR)六、近場數(shù)據(jù)處理在上一章節(jié)中,我們強調(diào)了數(shù)據(jù)流通主導了能源的消耗。雖然空間架構盡可能將儲存器安放在離計算很近的位置(如放入PE),但同時我們也在努力將高密度存儲器安置在近計算的位置,或者直接將計算集成到存儲器本身中。在嵌入式系統(tǒng)中,我們還努力將計算放入到傳感器(最先收集數(shù)據(jù)的元件)中。在本論文的這個章節(jié)中,我們將討論如何通過使用混合信號回路(mixed-signalcircuit)設計和高級存儲技術將處理盡可能放置在離數(shù)據(jù)近的地方以減少數(shù)據(jù)流通。A.DRAMB.SRAMC.非易失性電阻式存儲(Non-volatileResistiveMemories)D.傳感器圖33。通過(a)SRAMbit-cell和(b)非易失性電阻式存儲進行模擬計算七、DNN模型和硬件的聯(lián)合設計(CO-DESIGN)對DNN模型和DNN硬件進行聯(lián)合設計可以為處理效率帶來進一步的提升。在傳統(tǒng)上,DNN模型的設計目標是最大化準確度,而不會考慮太多實現(xiàn)的復雜性。但是,這可能會使得設計很難實現(xiàn)。DNN模型和硬件和聯(lián)合設計可以有效地聯(lián)合最大化準確度和吞吐量,同時最小化能耗和成本,這能增加采用的可能性。這種方法已經(jīng)在其它重要的且廣泛應用的多媒體應用(比如視頻壓縮)中得到了證明。之前的時候,視頻標準大多關注算法開發(fā)。從MPEG-2到AVC,在編碼效率上實現(xiàn)了2倍的提升,而解碼器復雜性卻增加了4倍[110]。最近,最新的視頻編碼標準HEVC[111]使用了算法和硬件的聯(lián)合設計;結果其相對于AVC在編碼效率上實現(xiàn)了又2倍的提升[112],而解碼器復雜性也只增加了2倍。在這一節(jié),我們將重點介紹幾個DNN模型和硬件聯(lián)合設計方面的研究。注意和第V節(jié)不同,這一節(jié)所提出的技術可能會改變準確度;盡管其目標是在最小化準確度改變的同時顯著減少能耗并提高吞吐量。這些方法可以大致分為以下幾類:降低運算和操作數(shù)的精度。這包括將浮點數(shù)改為定點數(shù)、減少位寬、移到對數(shù)域和權重共享。降低運算的數(shù)量和模型的大小。其中的技術包括:壓縮、剪枝和設計緊湊的網(wǎng)絡架構。表3:為AlexNet降低數(shù)值精度的方法。這里的準確度是在ImageNet上測得的top-5error。*表示
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 某大廈幕墻工程計算書
- 河南省西峽縣2024-2025學年九年級上學期期中歷史試題
- 內(nèi)科住培學員結業(yè)考試練習題2
- 實驗室安全與管理計劃
- 第13題低溫性能延度低溫延度低溫收縮
- 動態(tài)安全監(jiān)控方案制定計劃
- 學校社團工作計劃開拓學生的視野
- 管理會計師初級考試模擬題
- 水源地環(huán)境修復計劃
- 掌握日常開支的控制技巧計劃
- GB/T 35231-2017地面氣象觀測規(guī)范輻射
- 上海市閔行區(qū)2023屆九年級初三數(shù)學一模試卷及答案
- 高分子水凝膠
- 墨菲定律(參考課件)
- 光伏發(fā)電站設計標準規(guī)范
- 中國科學家光學之父王大珩的紅色故事PPT大力弘揚科學家精神PPT課件(帶內(nèi)容)
- 配電網(wǎng)工程施工工藝規(guī)范課件
- 財務預算編制說明范文(通用十四篇)
- GCMS氣相色譜質譜聯(lián)用儀基礎知識和培訓教材課件
- 小學科學招聘考試試題含答案(五套)
- 幼兒園大班語言活動《好長好長的電話》教案
評論
0/150
提交評論