深度學習技術基礎與實踐 課件全套 呂建成 第1-8章 深度學習概述-強化學習實戰_第1頁
深度學習技術基礎與實踐 課件全套 呂建成 第1-8章 深度學習概述-強化學習實戰_第2頁
深度學習技術基礎與實踐 課件全套 呂建成 第1-8章 深度學習概述-強化學習實戰_第3頁
深度學習技術基礎與實踐 課件全套 呂建成 第1-8章 深度學習概述-強化學習實戰_第4頁
深度學習技術基礎與實踐 課件全套 呂建成 第1-8章 深度學習概述-強化學習實戰_第5頁
已閱讀5頁,還剩418頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第1章深

述授課教師:時

間:第一章

深度學習概述主要內容1.11.21.3深度學習發展歷史深度學習的應用深度學習基本概念深度學習與機器學習、深度學習分類機器學習、神經網絡及深度學習發展史深度學習在圖像、文本及音視頻中的應用1.1

深度學習基本概念1.1.1深度學習與機器學習深度學習是機器學習中的一類最成功和有效的方法。一種使用多個“層”從輸入中逐步提取數據表達的學習算法在沒有明確編程的情況下,通過經驗自動改進的計算機算法。深度學習機器學習

機器學習深度學習1.1.1深度學習與機器學習在沒有明確編程的情況下,通過經驗自動改進的計算機算法。機器學習(a)經典編程(b)機器學習1.1.1深度學習與機器學習一種使用多個“層”從輸入中逐步提取數據表達的學習算法深度學習第1層第2層第3層第n層輸入數據0123456789輸出結果1.1.1深度學習與機器學習從信息處理角度對人腦神經元網絡進行抽象,建立某種簡單模型,按不同的連接方式組成不同的網絡。人工神經網絡1.1.2深度學習分類深度學習算法傳統分為監督、無監督和強化學習;隨著深度學習發展,對抗生成網絡、遷移學習、元學習和聯邦學習等多種學習方式被提出和廣泛研究。深度學習算法分類監督學習無監督學習強化學習模型通過學習訓練數據“輸入-輸出對”逼近輸入映射到輸出的函數;期望輸出被稱為“標簽”或“監督信號”;

標簽一般通過人工標注獲得;分類算法屬于典型的監督學習。在沒有標簽的數據中訓練模型;一般根據某種規則學習數據,如概率密度;聚類算法屬于典型的無監督學習。學習過程:代理(Agent)通過最大化累計獎勵,不斷更新自己的動作策略,最終獲得能根據環境做出最優動作的策略;沒有準確的監督信號做指導,是一個探索和利用的平衡過程;深度強化學習將深度學習應用于強化學習過程以提高其效率。深度學習算法分類(續)對抗生成網絡遷移學習元學習聯邦學習

同時訓練一個生成器和一個判別器,博弈提升性能

生成器學習并生成與真實樣本類似分布的輸出結果

判別器學習鑒別輸入是真實還是生成的結果

將某些任務上設計好的模型應用到另一個任務上

提升模型設計的效率

典型的NLP預訓練模型就是遷移學習的代表學習具有“學會學習”的能力,在小樣本條件下利用已有的學習經驗,快速完成新的任務;

既完成訓練時的任務,也獲得跨領域或任務的能力一種虛擬共享模型,在不同機構間通過加密交互中間結果和參數實現共享不同高質量數據的目的;

用于解決數據孤島、隱私和安全問題。深度學習算法分類(續)對抗生成網絡

同時訓練一個生成器和一個判別器,博弈提升性能

生成器學習并生成與真實樣本類似分布的輸出結果

判別器學習鑒別輸入是真實還是生成的結果聯邦學習一種虛擬共享模型,在不同機構間通過加密交互中間結果和參數實現共享不同高質量數據的目的;

用于解決數據孤島、隱私和安全問題。1.2

深度學習發展歷史1.2深度學習發展歷史01機器學習發展歷程始于上世紀50年代經歷約5個階段0203神經網絡發展歷程始于上世紀50年代經歷約3個階段,兩次低谷深度學習發展歷程始于2006年經歷發展期和爆發期兩個階段1.2深度學習發展歷史(續)01機器學習發展歷程始于上世紀50年代經歷約5個階段1.2深度學習發展歷史(續)01機器學習發展歷程始于上世紀50年代經歷約5個階段1952年,IBM公司Samuel研發出西洋跳棋程序,提出“機器學習”概念1997年,IBM公司深藍國際象棋程序戰勝世界排名第一的國際象棋大師卡斯特羅夫1.2深度學習發展歷史(續)02神經網絡發展歷史始于上世紀50年代經歷兩次低谷,三次崛起1.2深度學習發展歷史(續)02神經網絡發展歷史始于上世紀50年代經歷兩次低谷,三次崛起第一階段第二階段第三階段1943,M-P模型1949,Hebb規則1957,感知機模型1958,Adaline模型1969,明斯基結論

(低潮期)1970,SeppoBP算法雛形1974,WerbosBP算法1981-1986,BP+MLP1989,LeCun提出LeNet1991,梯度消失(低潮期)2006,Hinton在《Science》發表DBN論文通過無監督初始化和有監督BP解決梯度消失問題1.2深度學習發展歷史(續)03深度學習發展歷史2006年,Hinton在《Science》發表深度信念網絡DBN推動深度學習在學術界持續升溫。2011年,微軟和谷歌將深度神經網絡應用于語音識別,錯誤率降低20%-30%,獲顯著突破。2012年,Hinton課題組將CNN應用于ImageNet圖像識別比賽獲得奪冠。同年,吳恩達和JeffDean利用深度學習將圖像錯誤率從26%降低到15%。2014年深度學習的人臉識別率達97%,首超人類。1.2深度學習發展歷史(續)03深度學習發展歷史2016年,AlphaGo運用深度學習、強化學習技術戰勝人類九段職業選手,推動DL發展高潮。2017年,升級版AlphaGo加強強化學習和更深層次深度學習算法,戰勝世界排名第一柯潔1.3

深度學習的應用1.3深度學習的應用語音領域文本領域圖像領域多模態領域1.3深度學習的應用圖像0101Options02Options03Options04Options安防報警無人駕駛目標追蹤游戲娛樂安防支付門禁人臉識別AI藝術智能監控智慧醫療藝術畫創作電影制作智能診斷遠程手術醫療質控1.3深度學習的應用圖像01圖像識別在智慧醫療中的應用AI藝術畫作生成1.3深度學習的應用文本0201Options02Options03Options04Options輿情分析服務評價分析翻譯軟件語音助手機器翻譯智能問答情感分析文本生成智能新聞生成小說/劇本創作聊天機器人智能客服智能咨詢1.3深度學習的應用語音0301Options02Options03Options04Options違章鳴笛抓拍目標鎖定人機交互語音助手人機交互安防應用語音識別音頻合成聲源定位語音增強智能客服虛擬播報音樂創作話音通信質量保障復雜場景提升語音質量1.3深度學習的應用語音03可與人流暢語音交流的機器人索菲亞1.3深度學習的應用多模態0401Options02Options03Options04Options視頻描述視覺問答多模態對話代碼生成基于多模態深度語義理解:汽車智能座艙(語音+視覺)智能家居(語音+視覺)人機交互跨模態檢索多模態生成其它應用商品檢索智能客服商品推薦短視頻分類視頻推薦視覺推理語言視覺推理小結概述概念歷史應用機器學習與深度學習的關系、算法分類第2章深

理授課教師:時

間:主要內容2.1生物學啟示2.2深度學習的網絡模型2.3學習目標2.4學習算法2.5XOR問題2.6序列數據分類問題2.11生物學啟示生物學啟示2.1大腦細胞主要由神經元(Neurons)和神經膠質(Glia)組成大腦生物學啟示2.1神經元由細胞體、樹突和軸突組成神經元樹突

胞體

軸突輸入

處理

輸出生物學啟示2.1神經元蛋白質合成的主要場所胞體生物學啟示2.1神經元的輸入通道,接收其他神經元傳遞的電信號至胞體樹突生物學啟示2.1傳遞胞本體電位至突觸軸突生物學啟示2.1神經元間通信的特異性接頭突觸生物學啟示2.1神經元+連接(學習)生物神經網絡神經元間建立新的連接或修改已有連接為生物神經網絡的學習過程2.21深度學習的網絡模型深度學習的網絡模型2.2.1神經元?樹突接收多個輸入?胞體對輸入信息進行處理?處理后的信息通過軸突輸出(單輸出)如何抽象為數學模型?深度學習的網絡模型2.2.1胞體抽象表示∑f疊加/求和處理/激活胞體對輸入信息進行處理深度學習的網絡模型2.2.1樹突抽象表示

∑f其他神經元輸出

突觸調節

深度學習的網絡模型2.2.1輸出(軸突)抽象表示∑f

y深度學習的網絡模型2.2.1

常見激活函數深度學習的網絡模型2.2.1

神經元抽象表示向量化

深度學習的網絡模型2.2.1一個神經元分類實例深度學習的網絡模型2.2.1一個神經元的分類實例問題描述分類蘋果和橘子紅色光滑黃色粗糙描述(特征)::顏色,粗糙度深度學習的網絡模型2.2.1一個神經元的分類實例紅色光滑黃色粗糙

確定輸入維度

深度學習的網絡模型2.2.1一個神經元的分類實例確定輸出

深度學習的網絡模型2.2.1一個神經元的分類實例確定權重

∑f深度學習的網絡模型2.2.1一個神經元的分類實例確定激活函數

∑f

深度學習的網絡模型2.2.1一個神經元的分類實例測試

∑f深度學習的網絡模型2.2.1一個神經元的分類實例測試

∑f

深度學習的網絡模型2.2.1前饋神經網絡輸入層隱藏層輸出層網絡結構深度學習的網絡模型2.2.1前向傳播(計算)

深度學習的網絡模型2.2.1前向傳播深度學習的網絡模型2.2.1前向傳播

深度學習的網絡模型2.2.1前向傳播

深度學習的網絡模型2.2.1前向傳播

向量化

深度學習的網絡模型2.2.1前向傳播

深度學習的網絡模型2.2.1常見前饋神經網絡模型LeNetResNetU-Net深度學習的網絡模型2.2.1神經網絡的參數學習

參數更新規則:優化目標:梯度下降法深度學習的網絡模型2.2.1一個神經網絡學習的例子擬合綠色散點數據問題描述

深度學習的網絡模型2.2.1一個神經網絡學習的例子訓練過程損失值變化

損失函數:MSE

設計神經網絡結構1(Input)-10(Hidden)-ReLU(Activation)-10(Hidden)-1(Output)選擇優化器:SGD(隨機梯度下降法)

深度學習的網絡模型2.2.1一個神經網絡學習的例子(參考代碼)#-*-coding:utf-8-*-"""CreatedonWedMay1010:54:572023@author:ZhanaoHuang"""importmathimportmatplotlib.pyplotaspltimportnumpyasnpimporttorchfromtorchimportnn

importosimportimageiofromPILimportImageos.environ["KMP_DUPLICATE_LIB_OK"]="TRUE"

deffig2img(fig):"""ConvertaMatplotlibfiguretoaPILImageandreturnit"""importiobuf=io.BytesIO()fig.savefig(buf)buf.seek(0)img=Image.open(buf)returnimgdefgenerate_data():y=[]x=[]foriinnp.arange(0,5,0.1):x.append(i)y.append(math.cos(i)+np.random.uniform(-0.1,0.1))plt.scatter(x,y)plt.show()returnnp.array(x),np.array(y)

classNet(nn.Module):def__init__(self):super(Net,self).__init__()

self.fc=nn.Sequential(nn.Linear(1,10),nn.ReLU(),nn.Linear(10,1),)defforward(self,x):out=self.fc(x)returnout深度學習的網絡模型2.2.1一個神經網絡學習的例子(參考代碼)deftrain(net,x,y):optimizer=torch.optim.SGD(net.parameters(),lr=0.05)loss_func=nn.MSELoss()x=torch.from_numpy(x).float()y=torch.from_numpy(y).float()loss_all=[]img_loss_all,img_result_all=[],[]foreinrange(3000):outputs=net(x.view(-1,1,1))loss=loss_func(outputs.view(-1),y.view(-1).float())optimizer.zero_grad()loss.backward()optimizer.step()loss_all.append(loss.detach().numpy())

if(e)%10==0:print('epoch=',e,',loss=',loss)plt.plot(np.arange(len(loss_all)),loss_all,'green')plt.ylabel('loss')plt.xlabel('iteration')plt.xlim(0,3000)plt.ylim(0,1.5)fig_loss=plt.gcf()img_loss=fig2img(fig_loss)img_loss_all.append(img_loss)plt.clf()predict=net(x.view(-1,1,1))y_pre=predict.view(-1).detach().numpy()plt.scatter(x,y,color='g')plt.plot(x,y_pre,color='r')fig_result=plt.gcf()img_result=fig2img(fig_result)img_result_all.append(img_result)plt.clf()

imageio.mimsave('regression_loss.gif',img_loss_all,'GIF',duration=0.1)imageio.mimsave('regression_result.gif',img_result_all,'GIF',duration=0.1)if__name__=='__main__':x,y=generate_data()

net=Net()train(net,x,y)2.22循環神經網絡循環神經網絡2.2.2

輸入層隱藏層輸出層

前饋神經網絡循環神經網絡

Uo

輸入數據之間存在關聯,如語句,視頻,音頻等數據。輸入數據之間存無關聯。W輸入層隱藏層輸出層循環神經網絡2.2.2

Uo

W按時間步展開

U

W

W

U

W

U

W

循環神經網絡2.2.2信息傳播(計算)過程

U

W

W

U

W

U

W

循環神經網絡2.2.2無輸出的循環神經網絡U

W

WUWUW

循環神經網絡2.2.2最后時刻輸出的循環神經網絡U

W

WUWU

U

循環神經網絡2.2.2一個循環神經網絡示例建模CHINA

UC輸入標簽H

輸出隱藏層時間步1循環神經網絡2.2.2一個循環神經網絡示例

UC

U

輸入標簽H

輸出隱藏層時間步12循環神經網絡2.2.2一個循環神經網絡示例

UC

U

U

輸入標簽H

輸出隱藏層時間步123循環神經網絡2.2.2一個循環神經網絡示例

UC

U

U

U

輸入標簽H

輸出隱藏層時間步1234循環神經網絡2.2.2RNNs記憶長度問題RNNs可利用短期記憶信息,無法有效使用長期記憶信息。LongShortTermMemorynetworks(LSTM)引入門控機制控制信息流動,可有效處理長期記憶依賴問題。循環神經網絡2.2.2LSTM單元狀態(cellstate):控制信息流動循環神經網絡2.2.2LSTM遺忘門:丟棄信息循環神經網絡2.2.2LSTM輸入門:保存新信息循環神經網絡2.2.2LSTM輸入門:保存新信息循環神經網絡2.2.2LSTM輸出門:輸出信息循環神經網絡2.2.2LSTM變種Peepholeconnections.Gers&Schmidhuber(2000)耦合遺忘門和輸入門GRU2.23神經網絡結構設計神經網絡結構設計2.2.3人工設計神經網絡搜索專家參與效率低

自動搜索效率高神經網絡結構設計2.2.3神經網絡搜索的主要組成神經網絡結構設計2.2.3定義一組操作以及如何連接操作以形成有效的網絡體系結構搜索空間卷積池化連接操作神經網絡結構設計2.2.3對候選網絡結構進行采樣搜索策略強化學習進化算法基于梯度的方法神經網絡結構設計2.2.3測量或預測搜索出來的模型的性能,獲得相應反饋以供搜索算法學習性能評估策略層次化表示表現預測權重共享假設整體網絡是由cell重復構建的,搜索空間縮小到對兩類cell(normalcell和reductioncell)結構的搜索上,大大減小了搜索空間讓搜索中所有的子模型重用權重,將NAS的過程看作是在一張大圖中找子圖。將網絡進行變形,同時保持其功能不變。變形后重用之前訓練好的權重。使用一個代理模型輸出預測的驗證精度評估加速神經網絡結構設計2.3.2視覺自然語言處理語音醫療圖像分割目標檢測姿態估計語音識別關鍵字識別機器翻譯語言建模命名實體識別神經網絡結構搜索應用2.31代價函數代價函數2.3.1定義在整個訓練集上定義在單個訓練樣本上代價函數損失函數取平均值代價函數與損失函數代價函數2.3.1

最優的模型總能得到與真實值一致的預測值代價函數的定義代價函數2.3.1

代價函數的定義代價函數2.3.1在回歸任務中,常用均方誤差(Mean

Squared

Error,MSE)作為代價函數

均方誤差代價函數2.3.1交叉熵時神經網絡最常用的代價函數。信息熵描述的是隨機變量或整個系統的不確定性,熵越大,隨機變量或系統的不確定性就越大。交叉熵衡量的是在知道真實值時的不確定程度。交叉熵代價函數2.3.1

交叉熵2.32輸出表示輸出表示2.3.2代價函數的選擇與輸出表示形式的選擇緊密相關輸出表示的形式二值型N值型SigmoidSoftmax輸出表示的定義輸出表示2.3.2預測二值型變量

Bernoulli分布最大似然方法Sigmoid表示輸出表示2.3.2然而,神經網絡的輸出單元一般不存在偏置和激活函數。為了滿足上述約束條件,引入sigmoid函數

Sigmoid表示輸出表示2.3.2

需要表示一個具有n個可能取值的離散型隨機變量的分布可以使用Softmax函數Softmax表示輸出表示2.3.2引入Softmax函數對輸出進行歸一化

Softmax表示2.41Hebb學習規則Hebb學習規則2.4.1每次喂食前響鈴,狗將食物和響鈴聯系起來。一段時間后,盡管沒有食物,聽到響鈴也會分泌唾液。DonaldHebb認為:在同一時間被激發的神經元之間的聯系會被強化。巴甫洛夫的條件反射實驗Hebb學習規則2.4.1Hebb學習規則由DonaldHebb于1949年提出,為神經網絡的學習算法發展奠定了基礎。

如果兩個神經元被同時激活,那么它們的突觸即連接強度將會增加。

學習率Hebb學習規則2.4.1線性聯想器通過表征正負關系學習,無標簽輸入,屬于無監督學習。然而現實場景中存在大量成對數據的情景,如分類任務。

有監督的學習規則2.42反向傳播算法反向傳播算法2.4.2Cat?Dog?每個神經元上的參數設置為多少可以準確分類?參數更新算法確定網絡最優參數值反向傳播算法2.4.2反向傳播(BackPropagation)通過網絡輸出和期望輸出之間的誤差迭代調整權值,直到神經網絡對輸入的響應達到預期。前向傳播損失函數梯度下降反向傳播鏈式法則反向傳播算法2.4.2

……

前向傳播反向傳播算法2.4.2

以一個簡單的誤差計算為例:

方便后期求導計算,不影響效果。損失函數反向傳播算法2.4.2計算參數的梯度,以損失函數的負梯度方向,調整網絡參數。

第n層網絡

學習率每一輪梯度更新后,針對該輸入的模型輸出會更加接近期望輸出。

gradient

反向傳播+梯度下降反向傳播算法2.4.2以損失函數的負梯度方向,調整網絡參數。

第n層網絡

學習率每一輪梯度更新后,針對該輸入的模型輸出會更加接近期望輸出。

gradient

梯度下降反向傳播算法2.4.2

計算y關于x的導數,有:

鏈式法則回顧反向傳播算法2.4.2網絡通常是多層的,可以通過鏈式法則逐層計算梯度。以三層網絡為例:

鏈式法則-1

對于輸出層,有:

鏈式法則-2反向傳播算法2.4.2反向傳播算法2.4.2

對于輸出層,有:

鏈式法則-3反向傳播算法2.4.2

對于前一層,有:

鏈式法則-4反向傳播算法2.4.21:構造簡單的神經網絡并初始化本示例來自:/p/464268270反向傳播示例2:正向傳播,計算隱藏層神經元的輸出反向傳播算法2.4.2反向傳播示例3:正向傳播,計算隱藏層神經元的輸出反向傳播算法2.4.2反向傳播示例4:正向傳播,計算輸出層神經元的輸出反向傳播算法2.4.2反向傳播示例5:計算誤差反向傳播算法2.4.2反向傳播示例

反向傳播算法2.4.2反向傳播示例

反向傳播算法2.4.2反向傳播示例

反向傳播算法2.4.2反向傳播示例

反向傳播算法2.4.2思考與嘗試2.43時間步上的反向傳播時間步上的反向傳播2.4.3循環神經網絡包含特殊的循環連接,將神經元的輸出重新輸入神經元。循環神經網絡

通過時間反向傳播時間步上的反向傳播2.4.3

有:設:

有:

已知:

誤差計算與梯度計算-1時間步上的反向傳播2.4.3

誤差計算與梯度計算-2時間步上的反向傳播2.4.3

誤差計算與梯度計算-3時間步上的反向傳播2.4.3可以統一表達為:

誤差計算與梯度計算-4時間步上的反向傳播2.4.3計算兩個時間步的循環神經網絡的前向傳播和反向傳播;用編程語言實現簡單的循環神經網絡,并實現前向傳播與后向傳播過程。思考與嘗試時間步上的反向傳播2.4.32.44深度學習的泛化能力深度學習的泛化能力2.4.4泛化能力(GeneralizationAbility)衡量了模型對未知數據的預測能力,是一種舉一反三和學以致用的能力。CatDog訓練預測泛化能力泛化能力不好的表現深度學習的泛化能力2.4.4訓練模型復雜度高于實際問題,過度訓練,模型死記硬背,導致過擬合問題。模型復雜度低于實際問題,訓練不足,模型無法捕捉數據的特征,導致欠擬合問題。預測過擬合:邊緣沒有鋸齒,不是樹葉欠擬合:綠色的,是樹葉過擬合和欠擬合深度學習的泛化能力2.4.4結構復雜度和樣本復雜度;樣本質量;初始權值;學習時間;…泛化能力弱的原因深度學習的泛化能力2.4.42.51XOR問題的定義XOR問題的定義2.5.1異或是數學中的一種邏輯運算符,記為⊕運算規則0⊕0

=

11⊕0

=

00⊕1

=

01⊕1

=

1當兩個數的數值相同時為真,不相同時為假XOR問題的定義2.5.1在此特征空間下,用線性分類器無法解決XOR問題2.52解決XOR的神經網絡結構解決XOR的神經網絡結構2.5.2引入一個包含三層的前饋神經網絡解決XOR的神經網絡結構2.5.2引入一個包含三層的前饋神經網絡

解決XOR的神經網絡結構2.5.2引入一個包含三層的前饋神經網絡

2.53得到XOR的解得到XOR的解2.5.3對于已經收斂的前饋神經網絡,先令

矩陣可以表示為

得到XOR的解2.5.3將輸入矩陣與第一層權重矩陣進行相乘,并加上偏置矩陣

得到XOR的解2.5.3加入ReLU激活函數

得到XOR的解2.5.3得到模型最終的輸出值

2.61序列數據分類問題的定義序列數據分類問題的定義2.6.1文本數據作為一種天生的序列數據在深度學習領域被廣泛研究文本分類任務:給定一句評論,通過將該評論輸入一個神經網絡模型。判斷它是“好評”還是“差評”2.62序列數據分類問題求解序列數據分類問題求解2.6.2序列數據分類問題求解2.6.2分詞這電影真不錯!這#電影#真#不錯#!構建辭典[這:88,電影:156,真:14,不錯:23,!:5…]序列數據分類問題求解2.6.2獨熱編碼[88,156,14,23,5]模型學習將中的每個元素按照順序依次輸入循環神經網絡。取最后一個時間步的隱藏層狀態的值并送入一個全連接網絡進行維度轉換輸出值利用Softmax函數轉換到0-1之間的概率值,計算損失并梯度反傳更新整個網絡參數第3章深度學習框架介紹授課教師:時

間:

目錄3.13.23.3MindSpore介紹TensorFlow介紹概述深度學習框架總覽框架簡介、環境安裝和配置框架簡介、環境安裝和配置

目錄3.43.5PyTorch介紹如何選擇好的框架框架簡介、環境安裝和配置3.11概述深度學習框架總覽目前,應用最廣泛的深度學習框架有TensorFlow、PyTorch、PaddlePaddle、Caffe、MXNet等,也有如MindSpore這類的新起之秀。表3.1展示了至2021年9月Github上相關深度學習框架的具體信息。表3.1:深度學習框架總覽MindSpore的驅動前提為了減小從學術研究到工業生產之間存在的巨大鴻溝,提出了驅動人工智能(AI)框架演進的五大因素:“ABCDE”。Application+BigData:AI模型和數據大模型+大數據(GPT-3參數達1750億);從單一的NN向通用AI和科學計算演進。Chip:AI芯片和算力芯片/集群性能持續提升(E級人工智能算力集群);CPU/GPU/NPU多樣化異構算力。Developer:算法開發工程師關注算法創新,系統性能優化動力不足;算法迭代快,需要邊界的調試調優能力。Enterprise:AI部署+AI責任企業部署注重安全、隱私保護;AI產品的廣泛應用面臨公平性、可解釋挑戰。3.22MindSpore介紹3.2.1框架簡介2018年華為公司全聯接大會上提出了人工智能面臨的十大挑戰:1.模型訓練方面:深度學習模型訓練時間少則數日,多則數月;2.算力方面:目前GPU算力稀缺且昂貴,算力仍然是制約現階段深度學習發展的瓶頸之一;3.人工智能部署方面:主要在云,少量在邊緣;4.

算法方面:目前的訓練算法主要誕生于上世紀80年代,數據需求量大,計算能效較高,算法的可解釋較差;5.人工智能自動化方面:仍然面臨沒有人工就沒有智能的現狀;6.面向實際應用方面:模型的實際應用相對較少,工業應用不足;7.模型更新方面:模型參數非實時更新;8.多技術協同方面:現有的模型與其他技術集成不充分;9.平臺支持方面:現有的模型訓練是一項需要高級技能,難度較高的工作;10.相關人才獲得方面:目前的數據科學家稀缺,人才儲備不足。3.2.1框架簡介2020年3月28日,華為發布了新一代人工智能框架MindSpore,發布MindSporev0.1.0-alpha版本。2020年4月-8月,華為發布了V0.2.0-V0.7.0版本。2020年9月,華為發布了V1.0.0正式版本。在該版本中,MindSpore提供了所見即所得的模型開發和調優套件,同時也提供了40多個典型的高性能模型,覆蓋了計算機視覺、自然語言處理、推薦系統等多個領域。2021年9月,MindSpore已迭代更新至V1.3.0版本,支持增量推理模型部署,圖計算融合加速網絡訓練等新的特性。3.2.2環境安裝與配置下載Miniconda圖3.1:在官網上下載對應的安裝版本3.2.2環境安裝與配置下載Miniconda圖3.2:Miniconda安裝成功界面3.2.2環境安裝與配置MindSpore的正常運行依賴Python3.7.5運行環境,利用Miniconda創建一個符合該版本要求的Python虛擬環境。在AnacondaPrompt(Miniconda)中,鍵入以下命令創建Python虛擬環境:圖3.3:虛擬環境創建成功界面若虛擬環境安裝成功,則Prompt界面如圖3.3所示,可以利用condaactivatemindspore

和condadeactivatemindspore激活或退出MindSpore虛擬環境。3.2.2環境安裝與配置在Promt中鍵入condaactivatemindspore激活創建成功的虛擬環境,若環境成功激活,則命令符前括號中的字母應變更為“minspore”,激活成功界面如圖3.4所示。圖3.4:虛擬環境激活成功界面3.2.2環境安裝與配置圖3.5:MindSpore官網版本下載界面MindSpore的安裝十分簡單。MindSpore官網下載頁面如圖3.5所示,用戶只需根據適合的環境條件下載相應的安裝包或使用云平臺即可創建和部署該框架。3.2.2環境安裝與配置圖3.6:MindSpore

安裝成功界面以MindSpore1.3.0CPU版本為例,通過Python自帶的軟件包安裝工具pip,即可實現MindSpore的快速安裝。程序安裝完成界面如圖3.6所示。3.2.3MindSpore實現簡單神經網絡代碼1:引入MindSporeAPI使用MindSpore框架訓練模型前需要引入MindSporeAPI來輔助實現對應的功能,例如nn庫中提供了用于構建神經網絡的預定義構建模塊和計算單元;Model庫用于模型訓練和測試;callback庫用于保存模型的信息等,實踐案例如代碼1所示。3.2.3MindSpore實現簡單神經網絡代碼2:定義神經網絡模型使用MindSpore框架定義神經網絡模型時,需要繼承MindSpore的Cell類,它是構建所有網絡的基類,也是網絡的基本單元。同時,還需要根據模型的設計來重寫__init__方法和construct方法。3.2.3MindSpore實現簡單神經網絡代碼2:定義神經網絡模型代碼2中,__init__中提到的Conv2d代表卷積函數,用于提取特征;ReLU代表非線性激活函數,用于學習各種復雜的特征;MaxPool2d代表最大池化函數,用于降采樣;Flatten將多維數組轉化為1維數組;Dense用于矩陣的線性變換。construct中則是用定義好的運算實現網絡的前向傳播過程。3.2.3MindSpore實現簡單神經網絡代碼3:加載數據和定義模型參數定義了神經網絡結構之后,就需要加載訓練需要用到的數據集和定義模型的超參數。train_epoch表示所有數據在網絡模型中完成了前向計算和反向傳播的次數;lr代表學習率,決定了神經網絡學習問題的快慢;momentum是動量算法(與隨機梯度下降算法類似)中的一個參數;net_loss定義了模型的損失函數,反映了模型的預測值和真實值的差距,此處選用的是交叉熵損失函數;net_opt定義了模型的優化算法,用于更新模型中的參數。3.2.3MindSpore實現簡單神經網絡代碼4:訓練神經網絡模型最后一步是初始化神經網絡,再將模型超參數、神經網絡結構、損失函數、模型優化器和評價指標等一同傳給網絡模型,通過調用模型的train函數正式開始模型的訓練。3.33TensorFlow介紹3.3.1框架簡介隨著2016年3月AlphaGo戰勝李世石,深度學習和人工智能等概念迅速進入大眾的視野。而TensorFlow是AlphaGo擁有如此強大能力的基礎,它是Google公司在2015年11月開源的機器學習和深度學習的框架。TensorFlow深度學習框架的前身是Distbelief——致力于構建各個尺度下的神經網絡分布式學習和交互系統的第一代機器學習系統框架。然而Distbelief功能模塊較少、配置和部署復雜、使用復雜,所以沒能大規模推廣。后來隨著對Distbelief的代碼庫的簡化和重構,使其變成一個性能和健壯性都更高的開源深度學習框架,形成了TensorFlow。TensorFlow可以實現絕大多數場景下的各種深度學習算法,提供了多種語言的編程API,例如Python,C++等。其不僅可以在Windows和Linux操作系統中運行,還支持谷歌云等云服務計算。3.3.1框架簡介2019年6月TensorFlow2.0正式發布,相比早期TensorFlow的一些弊端進行了改造,形成了它的六大優勢:易用性:提供各種層次的基本操作API,可以實現絕大多數場景下的各種深度學習算法。高性能:隨著發展和優化,TensorFlow在主流深度學習訓練框架中性能一直處于領先地位。移動端支持:移動端可以使用TensorFlowLite進行訓練。Web端支持:Google公司發布的tensorflow.js支持深度學習訓練模型在Web端發布和操作。可視化:訓練中間過程和最終結果的可視化展示被設計為一個通用格式的數據渲染服務層。任何其他深度學習框架可以通過生成通用格式的文件由TensorFlow進行可視化展示。分布式訓練:TensorFlow框架被設計之初就具有分布式計算的特性,與數據并行計算的架構相比,該框架在RDMA節點通信方面具有明顯的優勢。3.3.2環境安裝與配置安裝JDK8安裝過程中會出現選擇服務條款,選擇“是”3.3.2環境安裝與配置測試JDK8是否安裝成功顯示以下內容為安裝成功3.3.2環境安裝與配置下載安裝Bazel依賴庫在Github的Bazel發布頁面下載Bazel二進制安裝文件安裝Bazel3.3.2環境安裝與配置安裝支持GPU驅動在CudaToolkit官網下載cuDNN安裝包3.3.2環境安裝與配置解壓安裝cuDNN查看cuDNN版本3.44PyTorch介紹3.4.1框架簡介PyTorch是由Facebook公司開發并發布的開源深度學習框架。于2016年發布。最初版本的PyTorch模塊單一,對張量的計算操作較少。隨著版本迭代,逐步形成了當前這種功能豐富、簡潔高效的深度學習框架。PyTorch最顯著的四個特點是簡潔、高效、概念簡單以及社區活躍。該框架采用了少抽象的設計理念,盡量采用Python語言的語法結構,而不是創造全新的抽象概念,在編程效率和可讀性方面都具有較大的優勢。但這種靈活性沒有犧牲程序運行效率。PyTorch在學術界和工業界都得到了廣泛的應用,躋身當今最受歡迎的深度學習框架之一。3.4.2環境安裝與配置創建虛擬環境激活該環境安裝PyTorch監測是否安裝成功3.55如何選擇好的框架3.5如何選擇好的框架不同的深度學習工具在性能、功能各方面表現迥異,如何挑選出一款適合自己的工具呢?下面給出一些選擇時可以參考的因素:MindSpore作為面向不同經驗人工智能開發者的一站式開發平臺,具有易上手、高性能、靈活的特點。TensorFlow社區資源豐富,用戶群體大,如果要實現的模型是一個比較經典的模型,可以非常容易地找到相關資料。PyTorch優勢是簡潔、速度、易用、社區活躍,在學術界頗受歡迎,但對比TensorFlow,其全面性略有不足。3.5如何選擇好的框架表3.2:各框架對比以上這些通用標準只是在選擇的時候給出一個通用建議,實際開發選擇框架時,應該首先考慮業務場景。如果需要快速構建一個模型,建議開發者選擇使用MindSpore。如果要構建一個計算效率高的模型,TensorFlow和PyTorch這兩個框架都被廣泛使用。Q&AAnyQuestion?第4章MindSpore實踐授課教師:時

間:01概述1.1概述神經網絡概述網絡通過數據“學習”網絡對新數據進行“預測”網絡訓練網絡推理經過訓練(Training)的神經網絡可以將其所學到的知識應用于現實世界的任務——圖像識別、圖像分割、語言翻譯等各種各樣的應用。神經網絡基于其所訓練的內容對新數據進行預測推導的過程就是推理。神經網絡概述02數據2.12.2數據集張量張量矩陣(2D張量)標量(0維張量)向量(1D張量)更高維張量僅包含一個數字的張量。在Numpy中,一個float32或float64的數字就是一個標量張量。數字組成的數組。一維張量只有一個軸。向量組成的數組。矩陣有2個軸,通常叫做行和列。可以將矩陣直觀地理解為數字組成的矩形網絡。將多個矩陣合成一個新的數組,可以得到一個3D張量。以此類推可以得到更高維的張量直觀理解張量Mindspore張量張量定義張量運算MindSpore中張量(Tensor)是一種簡潔而強大的數據結構算數運算線性代數矩陣處理(裝置,標引,切片)采樣Input_data參數:TensorIntNumpy.arraydtype參數:32mindspre.float64Mindspore張量實現importnumpyasnpfrommindsporeimportTensorfrommindsporeimportdtypeasmstypefrommindspore.opsimportoperationsasops//創建Tensordefinit_Tensor():a=Tensor(input_data=np.array([[1,2],[3,4]]),dtype=mstype.int32)b=Tensor(1.0,mstype.int32)c=Tensor(2)d=Tensor(True,mstype.bool_)e=Tensor((1,2,3),mstype.int16)f=Tensor(Tensor(1.0),mstype.float64)print(a,’\t’,b,’\t’,c,’\n’,d,’\t’,e,’\t’,f)Mindspore張量實現defcompute_Tensor():data1=Tensor(np.array([[0,1],[2,3]]).astype(np.float32))data2=Tensor(np.array([[4,5],[6,7]]).astype(np.float32))mul=ops.Mul()output_mul=mul(data1,data2)#對于合并和連接操作,輸入數據需要以列表或元組的形式執行操作con=ops.Concat()output_con=con((data1,data2))sta=ops.Stack()output_sta=sta([data1,data2])print(’Mul操作\t\tConcat操作\t\tStack操作\n’,output_mul,’\t\t’,output_con,’\t\t’,output_sta)Mindspore張量實現if__name__==’__main__’:print(”初始化Tensor”)init_Tensor()print(”Tensor之間的運算”)compute_Tensor()Mindspore張量實現初始化Tensor[[1,2]12[3,4]]True[1,2,3]1.0Tensor之間的運算Mul操作Concat操作Stack操作[[0.,5.][[0.1.][[[0.1.][12.,21.]][2.3.][2.3.]][4.5.][[4.5.][6.7.]][6.7.]]]Mindspore數據集標準數據集數據預處理數據集加載數據集創建mindspore.dataset訪問標準數據集

mindspore提供了打亂數據,分批等預處理接口create_dict_iterator接口用于數據加載通過實現__getitem__與__len__函數實現自定義數據用戶自定義數據集importmindspore.datasetasdsimportnumpyasnpnp.random.seed(58)classDatasetGenerator:’’’用戶自定義數據集類需實現__getitem__函數與__len__函數__len__:使迭代器能夠獲得數據總量__getitem__:能夠根據給定的索引值index,獲取數據集中的數據并返回?!痙ef__init__(self):self.data=np.random.sample((5,2))self.label=np.random.sample((5,1))def__getitem__(self,index):returnself.data[index],self.label[index]def__len__(self):returnlen(self.data)用戶自定義數據集defbuildDS_from_Customer():dataset_generator=DatasetGenerator()dataset=ds.GeneratorDataset(dataset_generator,[”data”,”label”],shuffle=False)returndatasetMindspore標準數據集defbuildDS_from_MindSpore():#需提前下載cifar10數據集DATA_DIR=”/your/path/to/cifar10/train”sampler=ds.SequentialSampler(num_samples=5)dataset=ds.Cifar10Dataset(DATA_DIR,sampler=sampler)returndataset數據集預處理defpreprocessing(dataset):ds.config.set_seed(58)#隨機打亂數據順序dataset=dataset.shuffle(buffer_size=10)#對數據集進行分批dataset=dataset.batch(batch_size=2)returndataset測試代碼if__name__==’__main__’:print(”常見數據集”)dataset1=buildDS_from_MindSpore()fordataindataset1.create_dict_iterator():print(”Imageshape:{}”.format(data[’image’].shape),”,Label:{}”.format(data[’label’]))print(”自定義數據集”)dataset2=buildDS_from_Customer()fordataindataset2.create_dict_iterator():print(’{}’.format(data[”data”]),’{}’.format(data[”label”]))print(”打亂數據集”)dataset2=preprocessing(dataset2)fordataindataset2.create_dict_iterator():print(”data:{}”.format(data[”data”]))print(”label:{}”.format(data[”label”]))運行結果常見數據集Imageshape:(32,32,3),Label:6Imageshape:(32,32,3),Label:9Imageshape:(32,32,3),Label:9Imageshape:(32,32,3),Label:4Imageshape:(32,32,3),Label:1自定義數據集[0.365105580.45120592][0.78888122][0.496060350.07562207][0.38068183][0.571761580.28963401][0.16271622][0.308804460.37487617][0.54738768][0.815856670.96883469][0.77994068]運行結果打亂數據集data:[[0.365105580.45120592][0.571761580.28963401]]label:[[0.78888122][0.16271622]]data:[[0.308804460.37487617][0.496060350.07562207]]label:[[0.54738768][0.38068183]]data:[[0.815856670.96883469]]label:[[0.77994068]]03模型模塊3.13.23.3激活函數池化層卷積層3.4全連接層3.5Flatten層3.6自定義層模型模塊MindsporeCell類卷積層激活函數池化層Flatten層卷積層卷積層(Conv)通過定義卷積核,對數據進行卷積運算從而提取特征不同的卷積核參數能夠提取出不同的數據特征并濾除其他無關特征卷積層nn.conv2d,nn.conv3D創建2D,3D卷積函數in_channels:輸入通道數目out_channels:輸出通道數stride:步長pad_mode:填充模式卷積層卷積核的數量決定了特征圖的數量步長決定了卷積核每次移動的距離卷積步長與卷積核大小、填充模式共同決定了輸出圖像的尺寸大小激活函數01020304人工神經網絡神經元上的函數解決非線性問題理論上可以逼近任意函數用于神經網絡學習復雜函數sigmoid函數將實數映射到(0,1)平滑,易求導運算量大不服從0均值分布網絡深會出現梯度消失的問題Tanh函數以0為中心收斂快運算量大網絡深會出現梯度消失的問題ReLU函數稀疏激活性更強的表達能力會出現靜默神經元LeakyReLU函數負半區間引入泄露值未激活神經元仍然有很小的梯度減少靜默神經元產生概率尚未證明比ReLU更好MS中構建激活函數importnumpyasnpimportmindsporeimportmindspore.nnasnnfrommindsporeimportTensordefActivation():sigmoid=nn.Sigmoid()tanh=nn.Tanh()relu=nn.ReLU()leakyrelu=nn.LeakyReLU(0.2)input_x=Tensor(np.array([?1,2,?3,2,?1]),mindspore.float32)output_s=sigmoid(input_x)output_t=tanh(input_x)測試激活函數if__name__==’__main__’:print(”常見的激活函數”)Activation()常見的激活函數sigmoid[0,268941430,8807970,047425870,8807970,26894143]tanh[?0,76159420.9640276?0.99505480.9640276?0.7615942]relu[0.2.0.2.0.]leakyrelu[?0.22.?0.62.?0.2]池化層池化層(Pooling)也叫下采樣層,通常應用于卷積層之后,用于壓縮數據特征池化層不僅可以提高計算速度,還減小了過擬合常見的池化函數為最大池化(maxpool)與平均池化(avgpool)。MS中構建池化層importnumpyasnpimportmindsporeimportmindspore.nnasnnfrommindsporeimportTensordefPooling():max_pool2d=nn.MaxPool2d(kernel_size=2,stride=2)avg_pool2d=nn.AvgPool2d(kernel_size=2,stride=2)input_x=Tensor(np.array([[[[1,2,3,4],[1,2,3,4],[1,2,3,4],[1,2,3,4]]]]),mindspore.float32)MS中構建池化層avg_pool2d=nn.AvgPool2d(kernel_size=2,stride=2)input_x=Tensor(np.array([[[[1,2,3,4],[1,2,3,4],[1,2,3,4],[1,2,3,4]]]]),mindspore.float32)#對于2D池化,輸入Tensor的維度需為4#形如[B,C,W,H]#B:批數batchsize#C:通道數channels#W:寬度width#H:高度heightoutput_max=max_pool2d(input_x)output_avg=avg_pool2d(input_x)print(”max_pool2d\n”,output_max,”\navg_pool2d\n”,output_avg)測試池化層if__name__==’__main__’:print(”常見的池化層”)Pooling()max_pool2d[[[[2.4.][2.4.]]]]avg_pool2d[[[[1.53.5][1.53.5]]]]全連接層全連接層(Dense)通過對輸入矩陣進行線性變換從而改變Tensor的維度。通常與Flatten層配合使用MS中構建測試全連接層importnumpyasnpimportmindsporeimportmindspore.nnasnnfrommindsporeimportTensordefDense():dense=nn.Dense(400,120,weight_init=’normal’)input_x=Tensor(np.ones([1,400]),mindspore.float32)output=dense(input_x)returnoutput.Shapeif__name__==’__main__’: print(”Dense層”,Dense())Dense層(1,120)全連接層Flatten層用來將輸入“壓平”,即把多維的輸入一維化,常用于卷積層到全連接層的過渡。例如維度為[W,H,C]的Tensor經過Flatten層處理后,會轉換為長度為W*H*C的一維Tensor。MS中構建測試Flatten層importnumpyasnpimportmindsporeimportmindspore.nnasnnfrommindsporeimportTensordefFlatten():flatten=nn.Flatten()input_x=Tensor(np.ones([1,16,5,5]),mindspore.float32)output=flatten(input_x)returnoutput.Shapeif__name__==’__main__’:print(”flatten層”,Flatten())flatten層(1,400)自定義網絡自定義神經網絡結構時,網絡類需要繼承Cell類,并重寫__init__方法和construct方法。其中__init__函數用于實現父類初始化,而construct函數用于定義網絡的前向傳播方式。實例化網絡后,網絡各層參數會自動初始化,這些權重和偏置參數會在之后的訓練中逐漸優化??梢酝ㄟ^使用parameters_and_names()方法訪問所有參數。MS中自定義LeNet#mynetwork.pyimportnumpyasnpimportmindsporeimportmindspore.nnasnnfrommindsporeimportTensorclassLeNet5(nn.Cell):def__init__(self,num_class=10,num_channel=1):super(LeNet5,self).__init__()#定義所需要的運算self.conv1=nn.Conv2d(num_channel,6,5,pad_mode=’valid’)self.conv2=nn.Conv2d(6,16,5,pad_mode=’valid’)self.fc1=nn.Dense(16?5?5,120)self.fc2=nn.Dense(120,84)self.fc3=nn.Dense(84,num_class

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論