最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

[軟件開(kāi)發(fā)] 大模型AIGC分享之「深度學(xué)習(xí)」篇

2023-08-24 18:30 作者:deepin深度操作系統(tǒng)  | 我要投稿

背景

??從去年底以來(lái),AIGC 炙手可熱,多個(gè)業(yè)界大佬都認(rèn)為 AIGC 會(huì)給整個(gè)產(chǎn)業(yè)帶來(lái)一場(chǎng)革命,甚至所有的軟件都會(huì)用 AI 重寫(xiě)。從歷史上來(lái)看,人機(jī)交互方式的變革往往會(huì)將操作系統(tǒng)帶入下一個(gè)世代,著名的例子如從命令行界面的 DOS 到鍵鼠圖形界面的 Windows,以及帶來(lái)觸控界面的 iPhone,領(lǐng)創(chuàng)者都成為了世界頂級(jí)企業(yè),帶動(dòng)了整個(gè)生態(tài)的發(fā)展。

??從技術(shù)上來(lái)看,AIGC 是基于大模型的,而大模型的基礎(chǔ)是深度學(xué)習(xí),因此,為了在產(chǎn)品上結(jié)合 AIGC,首先從技術(shù)上首先需要對(duì)深度學(xué)習(xí)進(jìn)行有深度的學(xué)習(xí)。

??對(duì)深度學(xué)習(xí)與大模型的探索將由一系列文章組成,本文是系列里的第一篇,主要關(guān)注的是深度學(xué)習(xí)的技術(shù)入門(mén)探索。

從神經(jīng)元開(kāi)始

??回溯歷史,深度學(xué)習(xí)起始于向人類(lèi)的大腦學(xué)習(xí)如何學(xué)習(xí)。人類(lèi)大腦皮質(zhì)的思維活動(dòng)就是通過(guò)大量中間神經(jīng)元的極其復(fù)雜的反射活動(dòng),因此不妨先看看神經(jīng)元的工作機(jī)制。

圖1 神經(jīng)元結(jié)構(gòu)

??圖1給出了神經(jīng)元的大體結(jié)構(gòu),左邊是神經(jīng)元的主體,其輸入是左側(cè)的多個(gè)樹(shù)突,其輸出是右側(cè)的一個(gè)軸突。只有當(dāng)輸入樹(shù)突的信號(hào)足夠強(qiáng)烈的時(shí)候,輸出軸突上才會(huì)有信號(hào)產(chǎn)生。受此啟發(fā),就可以設(shè)計(jì)一個(gè)最簡(jiǎn)單的有兩個(gè)輸入x1與x2,以及一個(gè)輸出y的線性函數(shù)來(lái)模擬單個(gè)神經(jīng)元,引入閾值θ,當(dāng) w1x1?+ w2x2?≥ θ時(shí),y為1(表示有信號(hào)),否則y為0(表示無(wú)信號(hào))。其中w1與w2分別是x1與x2的參數(shù)或權(quán)重(weight)。

??有了這個(gè)函數(shù),下面來(lái)看看它究竟能做什么。按照邏輯主義的設(shè)想,數(shù)學(xué)可以通過(guò)邏輯推衍出來(lái),那么不妨看看,上面的函數(shù)是否可以表征出基本邏輯運(yùn)算,如與、或、異或等,在這里x1、x2與y的取值都只能是0或1。

??對(duì)于邏輯與來(lái)說(shuō),只有當(dāng)x1與x2都是1的時(shí)候,y才是1,否則y是0,容易嘗試得到一組可能的w1、w2與θ,分別是0.5、0.5與0.7,如圖2所示。

圖2 邏輯與的線性函數(shù)圖

??圖2中橫軸為x1,縱軸為x2,從圖2中可以看到,(1, 1) 點(diǎn)為實(shí)心圓,表示y為1,在(0, 0)、(0, 1)與(1, 0)都是空心圓,表示y為0,中間的虛線表示w1x1?+ w2x2?= θ這條直線,只要這條直線能將(1, 1)點(diǎn)與其它點(diǎn)劃分到不同區(qū)域,則顯然就可以找到至少一組w1、w2與θ滿(mǎn)足條件。基于同樣的分析,容易知道邏輯或也可以找到對(duì)應(yīng)的w1、w2與θ。但是對(duì)于邏輯異或來(lái)說(shuō),問(wèn)題就嚴(yán)重了,顯然無(wú)法找到滿(mǎn)足條件的w1、w2與θ,如圖3所示。

圖3 邏輯異或的函數(shù)圖

??邏輯異或是當(dāng)x1與x2中一個(gè)為0,另一個(gè)為1時(shí)y才為1,否則y為0,因此在圖3中,點(diǎn)(0,1)與點(diǎn)(1,0)為實(shí)心圓,而(0, 0)與(1, 1)為空心圓,顯然是無(wú)法找到一條直線將兩個(gè)實(shí)心圓與兩個(gè)空心圓劃分在兩個(gè)不同區(qū)域的。因此,上述最樸素的線性神經(jīng)元函數(shù)無(wú)法表示邏輯異或,也就意味著有大量的運(yùn)算無(wú)法通過(guò)上述線性神經(jīng)元函數(shù)來(lái)進(jìn)行。

引入激活函數(shù)

??是否能改造上述函數(shù),讓它能支持所有運(yùn)算,從而能承擔(dān)學(xué)習(xí)的任務(wù)呢?至少,人腦肯定是能學(xué)會(huì)異或的?,F(xiàn)在看來(lái),主要是因?yàn)樵嫉纳窠?jīng)元函數(shù)太線性導(dǎo)致的這個(gè)問(wèn)題。因此,在深度學(xué)習(xí)中,就引入了非線性的激活函數(shù)(activation function),如圖4所示。

圖4 引入激活函數(shù)

??在圖4中,首先原函數(shù)被修改成了支持多個(gè)輸入和多個(gè)輸出的線性變換函數(shù),這樣就能處理更多種類(lèi)的問(wèn)題了。因?yàn)橛辛硕鄠€(gè)輸入x1、x2…xm與多個(gè)輸出h1、h2…h(huán)n,因此權(quán)重的下標(biāo)也帶有兩個(gè)數(shù)字,以表示每個(gè)權(quán)重的作用,例如 w12?是輸入x2與輸出h1間的權(quán)重。還有一個(gè)特殊的權(quán)重bi,它被稱(chēng)為偏置(bias),是一個(gè)待確定的常數(shù)項(xiàng)。這樣,h就等于相應(yīng)的x與w相乘后再加上b。例如,hi?= xiwi1?+ x2wi2?+ … + xmwim?+ bi。 ??經(jīng)過(guò)線性變換后得到的輸出h1、h2…h(huán)n只是中間過(guò)程的輸出,在之后,還需要加入一個(gè)非線性的激活函數(shù)的處理,以得到最終的輸出y1~yn,如圖4所示。

??在具體激活函數(shù)的選擇上,比較常見(jiàn)的有 softmax、sigmoid 與 relu 等。其中 softmax 函數(shù)是多分類(lèi)問(wèn)題最常用的輸出激活函數(shù)(多分類(lèi)問(wèn)題指的是一個(gè)問(wèn)題有多個(gè)確定個(gè)數(shù)的可能答案,例如是/否問(wèn)題是二分類(lèi)問(wèn)題,而分辨一個(gè)手寫(xiě)阿拉伯?dāng)?shù)字是哪個(gè)數(shù)就是一個(gè)十分類(lèi)問(wèn)題,因?yàn)榭赡艽鸢赣?~9一共十個(gè)),softmax也是包括ChatGPT在內(nèi)的大模型使用的輸出函數(shù)。 ??使用了激活函數(shù)以后,神經(jīng)網(wǎng)絡(luò)就可以學(xué)習(xí)到所有函數(shù)了。下面來(lái)看一個(gè)經(jīng)典的神經(jīng)網(wǎng)絡(luò)的例子,手寫(xiě)數(shù)字識(shí)別問(wèn)題,或MNIST問(wèn)題。MNIST涉及的手寫(xiě)數(shù)字在網(wǎng)上是公開(kāi)的,如圖5所示。程序員們可以先想想,如果自己來(lái)寫(xiě)一個(gè)程序識(shí)別手寫(xiě)數(shù)字會(huì)怎么寫(xiě)??梢宰R(shí)別手寫(xiě)數(shù)字的(一個(gè))神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)如圖6所示。

圖5 MNIST手寫(xiě)數(shù)字樣例

圖6 能識(shí)別手寫(xiě)數(shù)字的神經(jīng)網(wǎng)絡(luò)

??可以看到圖6的神經(jīng)網(wǎng)絡(luò)一共用到了三個(gè)線性變換,并使用了兩個(gè)sigmoid 激活函數(shù),以及最后的softmax激活函數(shù),因此可以說(shuō)這個(gè)神經(jīng)網(wǎng)絡(luò)是三層的。神經(jīng)網(wǎng)絡(luò)的輸入(x1~x784)是一個(gè)長(zhǎng)度為784的數(shù)組,其實(shí)就是一個(gè)28x28=784的手寫(xiě)數(shù)字的黑白圖像。神經(jīng)網(wǎng)絡(luò)的輸出(y1~y10)分別代表了0~9的阿拉伯?dāng)?shù)字,這是一個(gè)典型的十分類(lèi)問(wèn)題,因此使用softmax也是非常自然的。

??圖6中的神經(jīng)網(wǎng)絡(luò)一共有(784x50+50) + (50x100+100) + (100x10+10) = 45360個(gè)參數(shù),對(duì)比ChatGPT上千億個(gè)參數(shù),這顯然是一個(gè)微模型,但是它的識(shí)別能力卻可以達(dá)到92.53%,也就是說(shuō)一萬(wàn)個(gè)手寫(xiě)數(shù)字,它能正確識(shí)別出9253個(gè)來(lái)。 ??那問(wèn)題就來(lái)了,這45360個(gè)參數(shù)是怎么來(lái)的呢?肯定不能是隨便什么 45360 個(gè)數(shù)都能帶來(lái)這么高的識(shí)別率的,要解決這個(gè)問(wèn)題,就需要看看神經(jīng)網(wǎng)絡(luò)是怎么學(xué)習(xí)的了。

神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)

??在上面已經(jīng)看到,神經(jīng)網(wǎng)絡(luò)里有大量的參數(shù)。在最開(kāi)始,這些參數(shù)會(huì)被隨機(jī)分配一些數(shù)字(當(dāng)然如何隨機(jī)分配也有講究的,簡(jiǎn)潔起見(jiàn),此處先不提),此外也需要準(zhǔn)備大量的數(shù)據(jù),這些數(shù)據(jù)一般是多個(gè)輸入輸出的對(duì)(x, t)。例如在上面的手寫(xiě)數(shù)字識(shí)別問(wèn)題中,輸入x就是一個(gè)28x28的手寫(xiě)數(shù)字圖像,輸出t就是這個(gè)圖像對(duì)應(yīng)的0~9中的一個(gè)數(shù)字。 ??這些數(shù)據(jù)會(huì)被分成訓(xùn)練集與測(cè)試集。訓(xùn)練集中的數(shù)據(jù)用來(lái)訓(xùn)練神經(jīng)網(wǎng)絡(luò),讓神經(jīng)網(wǎng)絡(luò)中的參數(shù)最終達(dá)到正確的值。測(cè)試集中的數(shù)據(jù)用來(lái)測(cè)試訓(xùn)練后的神經(jīng)網(wǎng)絡(luò),對(duì)比看訓(xùn)練后的神經(jīng)網(wǎng)絡(luò)在新的數(shù)據(jù)下得到的結(jié)果是否正確。

??神經(jīng)網(wǎng)絡(luò)的訓(xùn)練過(guò)程可以大體分為下面幾步:

  • 對(duì)訓(xùn)練集中的輸入輸出對(duì)(x, t)進(jìn)行如下處理

  • 將x輸入到神經(jīng)網(wǎng)絡(luò)中,計(jì)算得到y(tǒng)

  • 將y與正確的輸出t進(jìn)行運(yùn)算得到損失L,損失的計(jì)算函數(shù)一般是均方差或交叉熵,前者針對(duì)的是回歸問(wèn)題(連續(xù)函數(shù)擬合),后者針對(duì)的是分類(lèi)問(wèn)題

  • 根據(jù)L調(diào)整神經(jīng)網(wǎng)絡(luò)的參數(shù),調(diào)整的方向是減少L,調(diào)整的方法是下面要講的反向傳播

    圖7給出了神經(jīng)網(wǎng)絡(luò)訓(xùn)練的過(guò)程。

圖7 神經(jīng)網(wǎng)絡(luò)訓(xùn)練過(guò)程

??一旦訓(xùn)練完畢,使用的時(shí)候就不需要正確輸出t,也不需要計(jì)算損失L和調(diào)整神經(jīng)網(wǎng)絡(luò)的參數(shù)了,這個(gè)過(guò)程被稱(chēng)為推理(inference),如圖8所示。

圖8 神經(jīng)網(wǎng)絡(luò)推理過(guò)程

??順便說(shuō)一句,圖中的深度神經(jīng)網(wǎng)絡(luò)與神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)是一樣的,但是層數(shù)較多,因此被稱(chēng)為深度神經(jīng)網(wǎng)絡(luò)。

??下面,再來(lái)看看神經(jīng)網(wǎng)絡(luò)究竟是怎樣通過(guò)損失L來(lái)調(diào)整網(wǎng)絡(luò)參數(shù)的。最簡(jiǎn)單,也是最直觀的方法就是將每個(gè)參數(shù)都稍微調(diào)大或者調(diào)小一點(diǎn),看L會(huì)如何變化,如果L變小,則保持此參數(shù)的調(diào)整,如果L變大,則將此參數(shù)反過(guò)來(lái)調(diào)整。以上即正向調(diào)整法,思路清晰,操作方法簡(jiǎn)單,但是計(jì)算量極大,因?yàn)槊空{(diào)整一個(gè)參數(shù)就要重新計(jì)算一遍y與L。

??另一種方法就是現(xiàn)在主流的反向傳播(BP,backpropagation)法,此方法類(lèi)似系統(tǒng)發(fā)生故障時(shí)的根因分析,首先分析最后一層的參數(shù)是怎樣影響到L的,然后分析倒數(shù)第二層的參數(shù)是如何影響到最后一層的輸入的,如此類(lèi)推。在數(shù)學(xué)上,其實(shí)就是計(jì)算L對(duì)某個(gè)特定參數(shù)w的(偏)導(dǎo)數(shù),因?yàn)閷?dǎo)數(shù)就代表了w的變化會(huì)導(dǎo)致L如何變化。根據(jù)鏈?zhǔn)角髮?dǎo)法則,L對(duì)w的導(dǎo)數(shù)等于L對(duì)中間變量h的導(dǎo)數(shù)乘以h對(duì)w的導(dǎo)數(shù),前者相當(dāng)于計(jì)算最后一層參數(shù)的導(dǎo)數(shù),后者相當(dāng)于計(jì)算倒數(shù)第二層參數(shù)的導(dǎo)數(shù),兩者相乘即為L(zhǎng)對(duì)導(dǎo)數(shù)第二層參數(shù)的導(dǎo)數(shù)。

??下面主要通過(guò)求導(dǎo)來(lái)展示反向傳播,如果希望更直觀一點(diǎn),可以閱讀計(jì)算圖相關(guān)的資料。假設(shè)真實(shí)函數(shù)是y=2x+1,則待求函數(shù)為wx+b(當(dāng)然w與b的真實(shí)值應(yīng)該是2與1)。下面通過(guò)一組數(shù)據(jù)(訓(xùn)練集)來(lái)通過(guò)反向傳播逐步計(jì)算更新w與b,看看它們否會(huì)逐漸逼近2與1。

??由于這是一個(gè)回歸問(wèn)題,因此使用均方差(y-t)< sup>2< /sup>/2作為損失L的函數(shù),顯然L對(duì)y的導(dǎo)數(shù)是y-t,參數(shù)更新使用經(jīng)典的梯度下降法(SGD),即參數(shù)新值=參數(shù)舊值 - 學(xué)習(xí)率x(L對(duì)參數(shù)的導(dǎo)數(shù)),梯度下降有一個(gè)粗糙但是直觀的理解,那就是學(xué)習(xí)應(yīng)該向著導(dǎo)數(shù)(梯度)相反(下降)的方向走,在這里學(xué)習(xí)率這個(gè)參數(shù)設(shè)為0.01。

??首先,將w與b隨機(jī)化為0.5與0.6。

??假設(shè)第一個(gè)訓(xùn)練對(duì)為(0, 1),則 y = wx + b = 0.5·0 + 0.6 = 0.6,L對(duì)w的導(dǎo)數(shù)=L對(duì)y的導(dǎo)數(shù)乘以y對(duì)w的導(dǎo)數(shù)=(y-t)·x=(0.6-1)·0=0,L對(duì)b的導(dǎo)數(shù)=L對(duì)y的導(dǎo)數(shù)乘以y對(duì)b的導(dǎo)數(shù)=(y-t)·1=-0.4。則w的新值為w-0.01·0=0.5,b的新值為b-0.01·(-0.4)=0.604,顯然新的w與b比原來(lái)的更接近(2, 1)。

??若第二個(gè)訓(xùn)練對(duì)為(1, 2.9)(本來(lái)應(yīng)為1與3,但是增加了一點(diǎn)誤差干擾),可以以同樣的方法得到新的w為0.51796,而新的b為0.62196,顯然比上一對(duì)w與b又接近了2與1一點(diǎn)。

??實(shí)際上,若繼續(xù)增加2x+1附近的數(shù)據(jù),可以發(fā)現(xiàn)到了十幾對(duì)訓(xùn)練數(shù)對(duì)之后,w與b即可相當(dāng)接近2與1了。

??以上例子是為了直觀感受反向傳播的計(jì)算而給出的,實(shí)際上這種線性函數(shù)的回歸可以通過(guò)數(shù)據(jù)集基于矩陣一次性算出來(lái),而且訓(xùn)練本身也要考慮收斂的問(wèn)題,因此實(shí)際的深度學(xué)習(xí)會(huì)更復(fù)雜一些,但是原理是類(lèi)似的。

??總地來(lái)說(shuō),深度神經(jīng)網(wǎng)絡(luò)是由多個(gè)層組成的,每一層均有前向(forward)推理的函數(shù),用來(lái)從輸入計(jì)算得到輸出,這個(gè)過(guò)程即為推理。每一層也有反向(backward)傳播的函數(shù),用來(lái)從后一層傳來(lái)的導(dǎo)數(shù)計(jì)算得到本層向前一層傳遞的導(dǎo)數(shù),并同時(shí)更新本層的參數(shù)。如果是訓(xùn)練,則需要在最后一層再加上一個(gè)輸入為t與y的損失層,輸出為L(zhǎng),如圖9所示。

圖9 多層神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)

??通過(guò)以上幾乎標(biāo)準(zhǔn)化的神經(jīng)網(wǎng)絡(luò)層,深度學(xué)習(xí)的研究者就可以像搭積木一樣對(duì)多個(gè)層進(jìn)行排列組合,得到多種多樣的深度神經(jīng)網(wǎng)絡(luò),并首先通過(guò)反向傳播訓(xùn)練出神經(jīng)網(wǎng)絡(luò)的參數(shù),繼而使用神經(jīng)網(wǎng)絡(luò)進(jìn)行推理應(yīng)用了。

內(nèi)容來(lái)源:deepin社區(qū)博客

原文鏈接:https://blog.deepin.org/posts/getting-started-with-deep-learning/

原文作者:raphaelzhang


[軟件開(kāi)發(fā)] 大模型AIGC分享之「深度學(xué)習(xí)」篇的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
黑河市| 扎鲁特旗| 新化县| 富源县| 二连浩特市| 武威市| 鸡泽县| 财经| 英吉沙县| 讷河市| 山丹县| 乐平市| 京山县| 略阳县| 扶风县| 瓮安县| 衡阳市| 曲阜市| 星子县| 通化市| 密云县| 大荔县| 宣汉县| 明光市| 化隆| 蓬溪县| 广丰县| 朔州市| 于田县| 汨罗市| 黑山县| 竹北市| 怀化市| 平乐县| 古交市| 南岸区| 大洼县| 西昌市| 延寿县| 桃江县| 红桥区|