




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
導(dǎo)論AI以極快的速度融入到每個人的日常,影響工作、學(xué)習(xí)、生活等方方面面。云計(jì)算、AI等浪潮下,IT從業(yè)者面臨新挑戰(zhàn),也迎來新機(jī)遇。未來,AI預(yù)計(jì)會成為像計(jì)算機(jī)語言一樣的基礎(chǔ)IT技能。本書面向廣大IT從業(yè)者及學(xué)生,作者將盡可能通俗易懂的把機(jī)器學(xué)習(xí)、深度學(xué)AIGC應(yīng)用,探討大語言模型“知識繭房”問題及解法。期望本書能成為AI技術(shù)愛好者的啟蒙書籍、學(xué)習(xí)手冊。希望人人都能了解AI,知其然并知其一點(diǎn)所以原來AI是這么回事AI應(yīng)用。目錄頁序 6AI應(yīng)用已無處不在 7AI到底是什么 9嘗試給AI一個定義 9機(jī)器學(xué)習(xí)訓(xùn)練及推理過程 12AI三要素數(shù)據(jù)、算法算力 13來一個AI的Helloworld”樣例 14數(shù)據(jù)集和模型的數(shù)學(xué)表達(dá)與抽象 16損失函數(shù)(CostFunction) 17梯度下降 20多變量擴(kuò)展 23小結(jié) 26講解視頻 28深度學(xué)習(xí)及神經(jīng)網(wǎng)絡(luò) 29神經(jīng)網(wǎng)絡(luò)的由來 31回看線性回歸 33激活函數(shù) 34Softmax多分類 38卷積:空間特征提取 39多輸入通道及多輸出通道 43特殊的卷積:1*1卷積 45卷積的難以解釋性 45池化/匯聚(Pooling)MaxPoolingAveragePooling 46全連接FullyConnected) 48深入理解經(jīng)典CNN 48像搭積木一樣構(gòu)建神經(jīng)網(wǎng)絡(luò) 51動手實(shí)踐:搭建一個自己的神經(jīng)網(wǎng)絡(luò)-手寫數(shù)字識別CNN 53更多經(jīng)典CNN 55動手實(shí)踐:在云上搭建深度學(xué)習(xí)notebook開發(fā)環(huán)境 57講解視頻 60AIGC及大模型 61硅基智能vs碳基智能:AIGC帶給我們的驚喜 61大語言模型(LLM) 63語言的數(shù)據(jù)特征 63文本轉(zhuǎn)向量(數(shù)字化) 64應(yīng)用開發(fā)新范式:對話即編程 67LLM在實(shí)際應(yīng)用中的難點(diǎn)問題 69LLM知識繭房”破解之法:RAG 71知識庫+LLM智能問答系統(tǒng)的構(gòu)建流程 73Langchain簡介 76系列動手實(shí)踐 79在云上從0開始搭建Langchain-ChatGLMLLM環(huán)境 79從0開始搭建LLM+知識庫智能問答釘釘機(jī)器人 84講解視頻 90如何把AI技術(shù)融入到產(chǎn)品 91產(chǎn)業(yè)界在干什么 91學(xué)術(shù)界在干什么 91AI落地三問 94附錄 96筆者簡介 96參考資料 96序 > 6 序AIAIITI預(yù)計(jì)會成為像計(jì)算機(jī)語言一樣的基礎(chǔ)T技能。筆者作為云計(jì)算行業(yè)從業(yè)者,對AI一直保持著強(qiáng)烈好奇心和關(guān)注。本書面向廣大IT網(wǎng)絡(luò)等基本原理講解清楚,并分享大語言模型、知識庫等當(dāng)下很火爆的AIGC應(yīng)用,探討大語言模型知識繭房問題及解法。期望本書能成為AI技術(shù)愛好者的啟蒙書籍、學(xué)習(xí)手冊。希望人人都能了解AI原來AI是這么回事,且能自己動手實(shí)踐,構(gòu)建自己的AI應(yīng)用。借此機(jī)會誠摯致謝吳恩達(dá)、周志華、李沐等學(xué)者以及斯坦福大學(xué)等機(jī)構(gòu)推出的優(yōu)秀AI課程,從中受益匪淺。本文也將引用其個別示例和圖表,用于加深大家對AI原理的理解。AI應(yīng)用已無處不在AI等。隨著chatGPT引爆的新一輪AI浪潮,使AIGC也進(jìn)一步融入到每個人的工作、學(xué)習(xí)、生活等方方面面。隨處可見的例子:圖像/人臉識別、語音識別、自動駕駛、游戲?qū)?zhàn)、商品推薦、內(nèi)容推薦、信用評估、風(fēng)控、垃圾郵件識別等等。數(shù)據(jù)類型角度:比如圖像領(lǐng)域,我們常見的人臉識別,車牌識別等。去上班的時候,都不需要帶工卡,門禁系統(tǒng)就能自動識別員工,停車場能自動識別車牌,消費(fèi)購物的時候可以直接刷臉等。視頻領(lǐng)域,道路上、園區(qū)里隨處可見的視頻監(jiān)控,包括現(xiàn)在的依然很火的自動駕駛,也是視頻圖像相關(guān)的AI應(yīng)用。音頻領(lǐng)域,語音識別,人機(jī)對話,智能音箱等。隨著大模型的發(fā)展,文本領(lǐng)域的AI應(yīng)用越來越火,包括現(xiàn)在的ChatGPT,NLPAIAI到底是什么嘗試給I一個定義AIAIAI到底是什么呢?耳熟能詳?shù)臋C(jī)器學(xué)習(xí)、神經(jīng)網(wǎng)絡(luò)又是什么呢?原理是什么呢?不知大家是否思考過這些AIAI是不是能炒股實(shí)現(xiàn)一夜暴富,是不是能自我進(jìn)化成新物種,顛覆人類,控制人類等等。我們無需花太多時間放在這些問題的爭論上,希望看完本書,可以帶給大家新的感悟,形成自己對AI的認(rèn)知。類比到人類自身認(rèn)知世界的方式:通過對已有的知識、信息等不斷的學(xué)習(xí)實(shí)踐,積累成自己處理問題的知識和經(jīng)驗(yàn),再使用學(xué)習(xí)到的知識和經(jīng)驗(yàn)針對新問題做決策判斷。絕大部分AI技術(shù)也有些類似:從已有的數(shù)據(jù)樣本(既有知識、信息)中使用數(shù)學(xué)、統(tǒng)計(jì)學(xué)等理論,通過不斷的算法訓(xùn)練(后文會詳細(xì)介紹訓(xùn)練過程和原理),得出AI模型類比為處理問題的知識和經(jīng)驗(yàn),也可以直觀的理解為一個函數(shù),再使用該模型針對新的輸入做推理決策。比如自然語言處理數(shù)據(jù)樣本可能是一再給一個新的圖片作為輸入,就可以輸出一個答案,或者是給出一個判斷,比如說這個圖片是只貓還是一只狗。AIAI做一個自己的定義:I是以數(shù)學(xué)、統(tǒng)計(jì)學(xué)為基礎(chǔ)理論的工程實(shí)踐。從數(shù)據(jù)中通過暴力計(jì)算挖掘出規(guī)律(算法/模型訓(xùn)練),再使用規(guī)律(模型)預(yù)測結(jié)果(推理)。AI的訓(xùn)練過程,可以簡單理解為從一堆該場景關(guān)聯(lián)的數(shù)據(jù)中,通過暴力計(jì)算,尋找一個合適的數(shù)學(xué)函數(shù),該函數(shù)可以表征或擬合已知數(shù)據(jù)樣本的規(guī)律。訓(xùn)練好后,再有新的輸入,就可以用這個函數(shù)做一個預(yù)測(輸出。此外,AI是以數(shù)學(xué)、統(tǒng)計(jì)學(xué)為AIAIChatGPT更是工程實(shí)踐上的大獲成功。AI的分類:大致可分成機(jī)器學(xué)習(xí)和知識推理,目前大家所說的AI,主要是指機(jī)器學(xué)習(xí)。機(jī)器學(xué)習(xí)又可以粗略的分成三類:監(jiān)督學(xué)習(xí),非監(jiān)督學(xué)習(xí),強(qiáng)化學(xué)習(xí)。其中監(jiān)督學(xué)習(xí)發(fā)展最為迅速,應(yīng)用最為廣泛。監(jiān)督學(xué)習(xí)和非監(jiān)督學(xué)習(xí)的主要區(qū)別:數(shù)據(jù)樣本是有標(biāo)注的,還是沒有標(biāo)注。舉個例子,圖片分類場景,給一個樣本圖片,并且標(biāo)明這個圖片上是一只貓,就稱這個樣本是有標(biāo)注的數(shù)據(jù)。用這些標(biāo)好的數(shù)據(jù)去訓(xùn)練AI模型,這就是監(jiān)督學(xué)習(xí),也是應(yīng)用更廣泛的一類,本文也將重點(diǎn)講監(jiān)督學(xué)習(xí)。而非監(jiān)督學(xué)習(xí),用于訓(xùn)練的數(shù)據(jù)樣本無需標(biāo)注。監(jiān)督學(xué)習(xí)又可分為兩大類:第一類是回歸問題(稱為線性回歸),第二類是分類問稱為邏輯回歸AI模型可以預(yù)測連續(xù)的值,或直觀理解為該函數(shù)的輸出是由連續(xù)值構(gòu)成的。舉個例子,訓(xùn)練一個模型去預(yù)測房價,房價可以理解是一個有連續(xù)輸出值的函數(shù),而分類問題的輸出是離散值,全部輸出值是一些離散值組成的集合。比如,預(yù)測一張圖片中的動物,是一只貓還是狗,輸出就是動物所屬的類別,而這些類別就是一個個離散值。此外,還有一塊重要內(nèi)容:深度學(xué)習(xí),屬于機(jī)器學(xué)習(xí)里的一個分支,早期也稱為模仿大腦的機(jī)器學(xué)習(xí)。很多大規(guī)模應(yīng)用的近現(xiàn)代AI模型,基本上都和深度學(xué)習(xí)相關(guān),包括現(xiàn)在大火的TransformerBERTGPT等。深度學(xué)習(xí)又分成多個類別,比如常見的CNN(卷積神經(jīng)網(wǎng)絡(luò)),在機(jī)器視覺領(lǐng)域應(yīng)用廣泛;RNN(循環(huán)神經(jīng)網(wǎng)絡(luò)),NLPDNN深度神經(jīng)網(wǎng)絡(luò)等等。機(jī)器學(xué)習(xí)訓(xùn)練及推理過程接下來,可以從機(jī)器學(xué)習(xí)中的監(jiān)督學(xué)習(xí)出發(fā),繼續(xù)探究AI的原理,看如何從數(shù)據(jù)樣本中,通過模型訓(xùn)練找到一個合適的函數(shù)。當(dāng)需要用AI解決的問題或場景)確定后,訓(xùn)練過程可粗略分為四大步:是AI數(shù)據(jù)工程師的主要任務(wù)之一。比如,最終要訓(xùn)練出一個函數(shù),那函數(shù)就有很多的輸入變量x1,x2…xn,每一個變量也稱為一個特征。Step2:函數(shù)集合(根據(jù)經(jīng)驗(yàn)選擇/試模型)、或開發(fā)定義新模型。處理一個問題,可AI中通常稱為模型最初,我們也不知道哪一個函數(shù)(或哪些函數(shù)的組合),最適合解決此問題。算法工程師根據(jù)自身經(jīng)驗(yàn)選擇可能適合的模型,或者采用最粗暴的方式,將各可能適合的模型逐個都訓(xùn)練一遍(這也是暴力計(jì)算的體現(xiàn)之一),逐個試效果。模型選定后,就可以用數(shù)據(jù)樣本開始訓(xùn)練,得出該模型對應(yīng)變量的參數(shù)。參數(shù)確定后,整個函數(shù)也就確定了。Step3:定義模型的好壞。有一套方法論來定義模型效果的好壞,后文將做詳細(xì)講解。Step4:找出最佳函數(shù)(及其最優(yōu)參數(shù))。通過前三步,可得出最佳模型,或者說最佳函數(shù)。就可以拿這個函數(shù)去做推理:給定一個新輸入,可以通過這個函數(shù)計(jì)算出結(jié)果。模型的推理效果也常稱為泛化能力:也即從有限的訓(xùn)練數(shù)據(jù)中學(xué)習(xí)得出的模型,如何確保在未知的新輸入數(shù)據(jù)上的預(yù)測能力、準(zhǔn)確性。I三要素:數(shù)據(jù)、算法、算力數(shù)據(jù):AI模型的知識源頭,如果數(shù)據(jù)本身就缺乏規(guī)律,沒有規(guī)律可發(fā)掘;或者該場景存在數(shù)據(jù)規(guī)律,但收集的數(shù)據(jù)樣本質(zhì)量很差,那不管使用何種算法去訓(xùn)練,都很難取得效果。沒有高質(zhì)量數(shù)據(jù),AI將是無源之水,寸步難行。數(shù)據(jù)量、數(shù)據(jù)質(zhì)量從根本上決定模型的推理質(zhì)量。算法:有了高質(zhì)量數(shù)據(jù)之后,有各種各樣的算法都可以訓(xùn)練出一個模型。算法的好壞也會直接決定模型推理的效果(泛化能力)。AIAI的訓(xùn)練過程就是通過不斷的暴力計(jì)算,去找尋最優(yōu)函數(shù)及其參數(shù)。尤其是現(xiàn)在已經(jīng)進(jìn)入深度神經(jīng)網(wǎng)絡(luò)、大模型時代,如果沒有充足的算力,是難以訓(xùn)練出模型的。chatGPT等LLM(大語言模型)類人智能的諸多驚艷表現(xiàn),放在十年前是難以想象的,因?yàn)槿狈θ绱藦?qiáng)悍的算力來完成模型訓(xùn)練。AI3AIAI的應(yīng)用場景十分關(guān)鍵,如果一開始場景就選錯了,后面做再多工作也是徒勞。此外,應(yīng)用生態(tài)的構(gòu)建、應(yīng)用效果的持續(xù)優(yōu)化,往往是比模型訓(xùn)練更具挑戰(zhàn)的工作。有資料顯示,自1970年到2020年,數(shù)據(jù)樣本有超過1000倍的增長,算力更有上萬倍的增長。尤其是進(jìn)入21世紀(jì),CPU、GPU、云計(jì)算等算力的增長尤為迅猛,加上2006年后逐步完善的深度學(xué)習(xí)等算法上的創(chuàng)新突破。進(jìn)一步引爆了AI這一上世紀(jì)50年代就已誕生的古老學(xué)科,AIGC(ChatGPT等LLM、文生圖、文生代碼等)、AGI等有諸多類人智能的AI應(yīng)用不斷涌現(xiàn)。來一個I的“ood”樣例AIAI就如同習(xí)武先打通任督二脈原理+實(shí)踐從一個監(jiān)督學(xué)習(xí)里的回歸問題的“Helloworld”示例入手:已有一批已標(biāo)注的數(shù)據(jù)樣本,看如何通過AI訓(xùn)練,找到一個函數(shù)來表征這個數(shù)據(jù)樣本集。在此,引入?yún)嵌鬟_(dá)老師機(jī)器學(xué)習(xí)教學(xué)視頻中的一個示例:房價預(yù)測。先將這個場景,抽象成一個回歸問題(線性回歸):給定一個數(shù)據(jù)集,這個數(shù)據(jù)集由“正確答案”組成。在房價的例子中,數(shù)據(jù)樣本就是一系列已成交房價相關(guān)的數(shù)據(jù),數(shù)據(jù)集中每個樣本包含了該套房子相關(guān)的信息,如房子的面積,房型,地段,樓層,朝向等等,以及該房子的正確價格(實(shí)際售價)?;谠摂?shù)據(jù)集,訓(xùn)練出一個模型(函數(shù)),從而推算出更多的正確答案,比如預(yù)測一個待售房子的價格。既然是“Helloworld”示例,可以先做一個極簡的假設(shè),先看只有一個變量(也稱為特征)的情況:假設(shè)房子的價格只跟面積相關(guān)。等全流程理順后,后面再擴(kuò)展其他變量就簡單了,因?yàn)樵硎且粯拥?。?shù)據(jù)樣本:輸入是每套房子的面積,輸出是該房子的售價(kaggle等網(wǎng)站上有大量可用于練手的數(shù)據(jù)集)。接下來,就可以構(gòu)造一系列函數(shù)來擬合這個數(shù)據(jù)集,如:y=ax+b //一次方函數(shù)y=ax2+bx+c //二次方函數(shù)。。。。。。 //其他更為復(fù)雜的多次方函數(shù)。這些可選擇的函數(shù),就構(gòu)成了一個集合比如y=ax+b一次方函數(shù),在坐標(biāo)軸上畫下來,就是一條直線。y=ax2+bx+c二次方及其他多次方函數(shù),可能就是一條曲線。接下來的任務(wù)就變成了,如何從這些函數(shù)集中找到最匹配的函數(shù),并確定其對應(yīng)的參數(shù)。數(shù)據(jù)集和模型的數(shù)學(xué)表達(dá)與抽象x:LotArea(sizeinsquarefeet)y:SalePrice($)8450208500960018150011250223500955014000014260250000……為了方便數(shù)學(xué)計(jì)算和表述,可把數(shù)據(jù)集、模型做個數(shù)學(xué)表達(dá):?代表訓(xùn)練集(從全量的數(shù)據(jù)樣本中隨機(jī)挑選出一定比例的數(shù)據(jù),用于訓(xùn)練,稱這批數(shù)據(jù)為訓(xùn)練集)中數(shù)據(jù)樣本的總數(shù)量。?代表特征/輸入變量。?代表目標(biāo)變量/輸出變量。(?,?)代表訓(xùn)練集中的實(shí)例。?)?)代表第i個數(shù)據(jù)樣本。h代表學(xué)習(xí)算法函數(shù),也稱為假設(shè)(hypothesis),也即:?=h(?)。各函數(shù)模型(表達(dá)式),可相應(yīng)的寫成如下形式(其中?0是一個常數(shù),也稱為偏置):h?(?)=?0+?1?h?(?)=?0+?1?+?2?2。。。。。。假如,我們根據(jù)自身經(jīng)驗(yàn)從函數(shù)集中,先挑選出一個可能合適的函數(shù),如,盲選一個最簡單的,選擇h?(?)=?0+?1?,再通過AI訓(xùn)練把該函數(shù)的各個參數(shù)?,都確定y的各個參數(shù)?都確定下來,使函數(shù)更精準(zhǔn)的匹配已有訓(xùn)練集呢?損失函數(shù)(CostFunction)先假設(shè)模型已經(jīng)訓(xùn)練完了,也即模型函數(shù)及其各參數(shù)值?個函數(shù)和訓(xùn)練集的匹配情況,也即該函數(shù)的好壞呢?最簡單的方法:將訓(xùn)練集中每個數(shù)據(jù)樣本的輸入?)都代入到預(yù)測函數(shù)?際值?(?)(真實(shí)售價)相減,并取絕對值,最后都加起來,就可以得到建模的誤差了。也即:建模誤差=建模誤差g果模型很好,理論上預(yù)測值和實(shí)際值就是一樣的,或者說至少是相近的。而建模誤差越大,則說明預(yù)測值偏離實(shí)際值越多。(有些書籍翻譯為代價函數(shù)也難以求導(dǎo)數(shù)(后文可以看出,求導(dǎo)在AI訓(xùn)練中非常有用)。有一個最簡單方式:使用平方,取差值的平方,和取絕對值的效果其實(shí)是完全一樣的,都可以有效反饋預(yù)測值和實(shí)際值間的差異。于是,損失函數(shù)變成:損失函數(shù)取差值的平方還有個好處:不需要再處理那些差值的正值和負(fù)值了,因?yàn)槠椒街螅际钦龜?shù)或0。接下來,繼續(xù)優(yōu)化損失函數(shù),有個影響因素需要考慮進(jìn)來:樣本數(shù)量?1m110萬個數(shù)據(jù)樣本,即便是同一個預(yù)測函數(shù)h?(?),最后算出來的總差值,依然可能會放大10倍,這不是我m1萬個樣本還是10多的。于是,損失函數(shù)變成:損失函數(shù)21(方便后續(xù)訓(xùn)練時對損失函數(shù)做求導(dǎo)運(yùn)算:平方函21/2可以相抵銷1/2,對我們判斷模型的好壞是沒有任何影響的。另一個更常用的損失函數(shù)就定義出來了,用?(?)表示:?(?)?使?(?)時的建模誤差也是最小的。如果損失函數(shù)值變得最小的話,那就初步認(rèn)為這個模型是?()最小。例如,一次方函數(shù),有兩個?參數(shù):將?0和?1看做變量,繪制函數(shù)到坐標(biāo)系中,三個坐標(biāo)分別為?0、?1和?(?0,?1)看出在三維空間中,存在一組(?0?1使?(?0?1)?(?0,?1)個最低點(diǎn)(最小值)對應(yīng)的(?0,?1)。梯度下降梯度下降是用來求解一個函數(shù)最小值及其對應(yīng)輸入值的一個算法。算法的解題思路:隨機(jī)選擇一個參數(shù)的組合(?0,個能讓損失函數(shù)值下降的參數(shù)組合。一直重復(fù)該過程,直到找到局部最小值(localminimum)是全局最小值(globalminimum),選擇不同的起始參數(shù)組合,有可能會找到不同的局部最小值。對于梯度下降,有個很形象的解釋,結(jié)合前面的?(?0,?1)隨機(jī)的把你投到山上面的任何一個點(diǎn),如何走到最低點(diǎn)。我們可以先只看其中一個(固定其余變量比如先只看或者先只看?0坐標(biāo)軸方向縱向切一刀。切出來后,是一條二維曲線,問題就變成了如何從當(dāng)前所在的點(diǎn),走到最低點(diǎn)。導(dǎo)數(shù)/偏導(dǎo)數(shù):’(y-y)/(x-x)△y△x △x->)yy-y’(x-x)y-y’x 導(dǎo)數(shù)切線指向最陡峭的方向)可以使用高等數(shù)學(xué)中求導(dǎo)數(shù)/偏導(dǎo)數(shù)的方法,找到曲線的切線方向,如果始終沿著該點(diǎn)的切線方向一步一步走,就能走到最低點(diǎn),而且理論上這個方向是可以最快的走到最低點(diǎn)。每走一步,下一步就沿著新點(diǎn)的切線方向繼續(xù)往下走,直到最低點(diǎn),用數(shù)學(xué)公式表示:直觀理解梯度下降原理:隨機(jī)初始化一個起始值,?每次更新都減去偏導(dǎo)和放大系數(shù)α(控制速度/步幅)的乘積,便能走到下一個步進(jìn)點(diǎn),得到更小的?(?)值(離最低點(diǎn)又近了一步),每次?值更新后,就可以計(jì)算出新的?(?)和h?(?),代入到求偏導(dǎo)的公式中,又可以走到下一步。如此,反復(fù)循環(huán)的重復(fù)這個動作(這也是AI訓(xùn)練,暴力計(jì)算的體現(xiàn)之一),當(dāng)?(?)值不再明顯變化(也即無更小值了。此時偏導(dǎo)接近0,切線方向與x軸平行或接近平行,?值也不再變化),則意味著找到了?(?)的最小值及對應(yīng)的?參數(shù),則訓(xùn)練結(jié)束(或達(dá)到設(shè)置的最大訓(xùn)練次數(shù)時,也會結(jié)束訓(xùn)練)。進(jìn)一步思考:α在機(jī)器學(xué)習(xí)中是一個超參數(shù),稱為學(xué)習(xí)率。從前面的理解不難看出:α值的大小會控制每一步走多長(步幅),或者是走多快。α如果設(shè)置過小,則每次α(大概率在接近最低點(diǎn)時會反復(fù)越過最低點(diǎn),而導(dǎo)致無法收斂。通??蓢L試選不同的學(xué)習(xí)率:?=0.01(常用),0.03,0.1,0.3,1,3,10。至此,機(jī)器學(xué)習(xí)訓(xùn)練的基本過程和原理也講解完畢了。我們再回到房價預(yù)測這個例子上來,通過上述訓(xùn)練過程后,房價預(yù)測函數(shù)及其參數(shù)就確定了。這時候再輸入一個新房子的面積,就可以用這個函數(shù)計(jì)算出對應(yīng)的售價,從而實(shí)現(xiàn)對該房子的房價預(yù)測。多變量擴(kuò)展前面的例子,為了函數(shù)畫圖簡便,我們把輸入變量做了極簡的假設(shè):輸入變量只有一個房子的面積,函數(shù)也選了個極簡的一次方函數(shù)。實(shí)際上,房間數(shù)量、戶型、朝含大量變量的數(shù)據(jù)集。而且最優(yōu)的模型函數(shù)也通常不是一次方的簡單函數(shù),而是有更為豐富和復(fù)雜的函數(shù)可選。但處理方法依然是大同小異的。比如,多變量的擴(kuò)展,有了前面的理解,其實(shí)就很好處理了,只是函數(shù)多了一些輸入變量及其?參數(shù)而已,依然可以采用梯度下降的方式做訓(xùn)練,找到?(?)的最小值及對應(yīng)的?(?0,現(xiàn)在是(?0算的?多一些而已,計(jì)算量更大了,就這么個差別。還可以把(?0,?1……?n)變量(1x1……xn)寫成向量的方式,如,ΘX均寫成(n+1)*1的向量:。。。。。。小結(jié)假如你想用AIAI為例,第一步需要盡可能收集與該問題相關(guān)的數(shù)據(jù)樣本,且理論上數(shù)據(jù)樣本越全面越具有代表性則越好。然后,需要對數(shù)據(jù)上做一些預(yù)處理。比如數(shù)據(jù)的質(zhì)量參差不齊,有些數(shù)據(jù)樣本本身就是錯誤的,或者缺失了一些關(guān)鍵信息,是無效數(shù)據(jù),需要剔除。此外,還需要提煉輸入特征,可能還涉及一些特征值的數(shù)字化處理(訓(xùn)練過程中只能處理數(shù)字化后的變量)。比如預(yù)測房價的例子,它在哪一個區(qū),是以文字表述的,怎樣轉(zhuǎn)化成數(shù)字呢?比如我想分析深圳某5個區(qū)的房價,每個區(qū)可以使用12法有很多,這只是舉了個最簡單的方式。最后,還需要采用隨機(jī)取樣等方式,按一定比例,將數(shù)據(jù)樣本分成訓(xùn)練集、測試集等。第二步:構(gòu)造一個函數(shù)。機(jī)器學(xué)習(xí)的常用算法很多,如何從諸多算法里挑選出合適的算法,就需要大量的積累和學(xué)習(xí)。算法選好后,還需要選擇一個合適的損失函數(shù)。損失函數(shù)本身也有很多種,前面例子中,求建模誤差的平方,只是其中一個常用的損失函數(shù)。需要根據(jù)實(shí)際處理的具體問題選擇適合的損失函數(shù),并且最好先弄清楚損失函數(shù)的基本原理。第三步就可以用訓(xùn)練樣本集,結(jié)合算法模型和損失函數(shù),使用梯度下降等方法訓(xùn)練模型。一步一步去逼近損失函數(shù)最小值及其對應(yīng)的各參數(shù)?。當(dāng)求解到損失函數(shù)最小值時,對應(yīng)的這些參數(shù)?,就認(rèn)為已找到了最優(yōu)參數(shù),該函數(shù)訓(xùn)練完畢。當(dāng)然,也有可能運(yùn)氣不太好,隨機(jī)初始化的起始參數(shù),訓(xùn)練后只找到了局部最優(yōu)解,需要設(shè)置不同的隨機(jī)初始參數(shù),重復(fù)訓(xùn)練多輪,尋找更優(yōu)解。學(xué)習(xí)率等超參數(shù)設(shè)置不合理,導(dǎo)致訓(xùn)練過程遲遲無法收斂。也有可能選擇的函數(shù)模型本身不是最優(yōu)的,導(dǎo)致推理效果不理想等等。這其中有大量的知識需要學(xué)習(xí),比如超參數(shù)的調(diào)測,如何加快訓(xùn)練速度,提升算法效果等。目前業(yè)界也有一些使用簡便的AutoML產(chǎn)品來簡化訓(xùn)練和調(diào)優(yōu)過程??傊?,算法訓(xùn)練過程是個不斷的分析、調(diào)測、一輪又一輪不斷優(yōu)化的過程,這也是AI訓(xùn)練是暴力計(jì)算的另一個體現(xiàn)??傊?,算法訓(xùn)練過程是個不斷的分析、調(diào)測、一輪又一輪不斷優(yōu)化的過程,這也是AI訓(xùn)練是暴力計(jì)算的另一個體現(xiàn)。第四步,可以用訓(xùn)練好的算法模型,去做推理,使用測試集做效果評測,這其中需處理過擬合、欠擬合等問題,可能也涉及算法模型的重新選擇、反復(fù)訓(xùn)練,直到得到各項(xiàng)指標(biāo)達(dá)標(biāo)的算法,最后上線應(yīng)用。有了這些理解,邏輯回歸、深度學(xué)習(xí)、神經(jīng)網(wǎng)絡(luò)等訓(xùn)練的大體步驟和基本原理都是相通的,只是有不同的特征向量、參數(shù)、函數(shù)、損失函數(shù)、訓(xùn)練方法等。當(dāng)然,AI本就不是萬能的,切忌在各種盲目的鼓吹聲中失去理性判斷。通過前文的學(xué)習(xí),可以有個清晰的認(rèn)知:AI的本質(zhì)是從現(xiàn)有的數(shù)據(jù)樣本中發(fā)掘數(shù)據(jù)的規(guī)律,然后使用該規(guī)律針對新輸入做輸出。也有可能問題本身或者搜集的數(shù)據(jù)本身就不適合使用AI來解決,那即便是做再多的訓(xùn)練也是徒勞。遇到一個問題時,可以先從數(shù)據(jù)角度去分析思考,數(shù)據(jù)本身是否可能存在規(guī)律,問題本身是否能從獲取的數(shù)據(jù)樣本中找到關(guān)鍵規(guī)律,至少可以先有個理性的思考判斷。此外,找準(zhǔn)合適的應(yīng)用場景極其重要?;氐轿闹蟹績r預(yù)測的例子,實(shí)際應(yīng)用中,一套房子的價格,即便是同屬于一個社區(qū)的,也會因?yàn)闃潜P的開發(fā)商、位置、年份、房間的樓層、朝向等各種因素的影響。同一個樓盤的房間數(shù)量也是極其有限的,也即針對一套待售房子,有參考價值的數(shù)據(jù)樣本數(shù)量是很有限的。通過前文的原理性講解,可以看出,在數(shù)據(jù)樣本數(shù)量稀少的情況下,是難以訓(xùn)練出高質(zhì)量模型的。此外,哪怕是同一套房子,在不同的年度,可能因政府政策、經(jīng)濟(jì)發(fā)展等因素,而導(dǎo)致房價的巨大差異。每年的政府政策,大環(huán)境的經(jīng)濟(jì)發(fā)展往往起更大的作用,是影響房價的關(guān)鍵因素,而這些因素通常是難以體現(xiàn)在歷史交易數(shù)據(jù)(樣本)中的。所以,房價預(yù)測這個應(yīng)用場景,從AI的原理上分析,本身是不太合適的。大費(fèi)周章的訓(xùn)練一個AI模型,還不如直接參考近幾個月該樓盤具有相似屬性的房子的成交價,做個估算,來的更為直接和準(zhǔn)確。雖然可能偏離實(shí)際應(yīng)用,但作為一個學(xué)習(xí)示例,講解原理是可以的。有了這些基本原理的掌握,再遇到AI是不是能炒股實(shí)現(xiàn)一夜暴富,是不是能自我進(jìn)化成新物種,顛覆人類,控制人類等天馬行空的問題,相信讀者可以從AI的原理角度展開,做思考分析,形成自己新的認(rèn)知和答案了。講解視頻為進(jìn)一步方便學(xué)習(xí),錄制了講解視頻,詳見:https:///video/BV1414y197xd/?vd_source=0c5a39664e27af522bfcd1e74b9780a8深度學(xué)習(xí)及神經(jīng)網(wǎng)絡(luò)接下來,我們可以學(xué)習(xí)一個更有意思的:神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí)。假如把人想象成一個處理數(shù)據(jù)的智能機(jī)器,那么眼睛、耳朵、鼻子、嘴巴、皮膚等各個視覺、聽覺、嗅覺、味覺、觸覺等相關(guān)的器官,均是輸入。大腦處理加工這些信息,進(jìn)行知識積累和訓(xùn)練。其中有兩類數(shù)據(jù)最為常見:所謂眼觀六路、耳聽八方。目之所見是圖像,耳之所聽是聲音、語言。AI有兩大應(yīng)用廣泛的領(lǐng)域分別與之對應(yīng):ComputerVersion(機(jī)器視覺/計(jì)算機(jī)視覺),NLP(自然語言處理)。圖像和語音數(shù)據(jù)都是有顯著空間和時間特征的:觀-圖像:空間特征(平移不變性、局部相關(guān)性) CV聽-音頻、語言、文本:時序、上下文關(guān)聯(lián)(語境、權(quán)重) NLP接下來,我們重點(diǎn)以圖像處理來講解神經(jīng)網(wǎng)絡(luò)。如何理解圖像的平移不變性和局部相關(guān)性空間特征呢?平移不變性:比如給某人拍照,針對同樣一個人。把鏡頭挪一下,讓這個人在照片中所處的位置做個變化(見下圖,沒找到合適的示意圖:針對相同的背景圖片,可以任意移動目標(biāo)人像)。原先她可能在中央位置,現(xiàn)在偏左或者偏右了。如果使用AI模型去判斷,比如人臉識別,理論上,都應(yīng)該判斷出是同一個人,這叫平移不變性。局部相關(guān)性:依然以人像為例,有眼睛、鼻子、嘴巴這些基本構(gòu)造,而且彼此是局部相關(guān)的,比如眼睛的旁邊有另外一只眼睛,附近是鼻子,往下是嘴巴。或者取圖片中一小塊圖像,比如眼睛,本身也是局部相關(guān)的,睜開的眼睛是一個類似橢圓的形狀,中間是圓形的眼球,也即該圖像塊中的像素點(diǎn)之間是彼此有關(guān)聯(lián)的,或者有規(guī)律的。而且這個規(guī)律具有局部性。前面講解的線性回歸、邏輯回歸等傳統(tǒng)機(jī)器學(xué)習(xí),很難有效處理空間和時間特征。RGB紅、G(綠)、B(藍(lán))三個顏色通道的值(0~255)來表示??梢院唵卫斫鉃槊繌埡诎讏D片就是一個二維矩陣(長、寬),彩色圖片還涉及多個通道(多個二維矩陣)。100*100已經(jīng)足夠小了(100100)。使用之前的監(jiān)督學(xué)習(xí)來處理,每一個像100*100,也即一萬個特征。像素和像素之間還有些100002/25統(tǒng)機(jī)器學(xué)習(xí)已難以處理這么多的特征,訓(xùn)練不動,而且也很難提煉平移不變性、局部相關(guān)性規(guī)律,此時需要神經(jīng)網(wǎng)絡(luò)。神經(jīng)網(wǎng)絡(luò)的由來神經(jīng)網(wǎng)絡(luò)(NeuralNetworkNN)的命名,是類比于醫(yī)學(xué)上的神經(jīng)網(wǎng)絡(luò)構(gòu)成而來(不過實(shí)際上,當(dāng)前大多數(shù)深度學(xué)習(xí)的研究和突破,其實(shí)并沒有直接從神經(jīng)科學(xué)中獲得太多靈感):神經(jīng)網(wǎng)絡(luò)是大量神經(jīng)元相互鏈接并通過電脈沖來交流的一個網(wǎng)絡(luò)。每一個神經(jīng)元都可以被認(rèn)為是一個處理單元/神經(jīng)核(processingunit/Nucleus),它含有許多輸入/樹突(input/Dendrite),并且有一個輸出/軸突(output/Axon)。神經(jīng)元:可以接收多個輸入,匯集到處理單元運(yùn)算,給出一個輸出。這個輸出,又可以和下一個神經(jīng)元相連,作為下一個神經(jīng)元的輸入,由此可以形成一個龐大的神經(jīng)網(wǎng)絡(luò)。抽象成數(shù)學(xué)表達(dá):NN構(gòu)建:,?2,?3是輸入單元(input?1,?2,?3間單元(類比神經(jīng)元),負(fù)責(zé)處理數(shù)據(jù),然后傳遞到下一層。最后是輸出單元,負(fù)責(zé)計(jì)算h?(?)。第一層稱為輸入層(InputLayer),最后一層稱為輸出層(OutputLayer),中間層全部稱為隱藏層(HiddenLayers),隱藏層通常不止一層,存在大量的隱藏層。回看線性回歸我們再回到前面講解的線性回歸,回顧預(yù)測房價的示例,會發(fā)現(xiàn)線性回歸其實(shí)就是一個單層神經(jīng)網(wǎng)絡(luò):沒有經(jīng)過其他隱藏層,直接輸入變量?,每個?對應(yīng)一個?參數(shù),作用之后得出了h?(?),相當(dāng)于只有一個神經(jīng)元的單層神經(jīng)網(wǎng)絡(luò):再回到神經(jīng)網(wǎng)絡(luò),本質(zhì)就是在單層神經(jīng)網(wǎng)絡(luò)的基礎(chǔ)上,疊加多個神經(jīng)元,并且一層層的往上疊加多層,每?層都輸出到上?的層,直到?成最后的輸出,就變成了一個龐大的神經(jīng)網(wǎng)絡(luò)。但拆開其中的每個神經(jīng)元,其實(shí)就是之前學(xué)習(xí)過的線性回歸:可以把前L-1層看作表?,把最后?層看作線性預(yù)測器。這種架構(gòu),也叫多層感知機(jī)(multilayerperceptron,縮寫為MLP)。接下來,我們將分成幾個小章節(jié),分別介紹神經(jīng)網(wǎng)絡(luò)涉及的一些運(yùn)算和基本概念,最后再將他們像搭積木一樣組合起來,就能構(gòu)建出實(shí)用的神經(jīng)網(wǎng)絡(luò)模型了。激活函數(shù)有了前面的理解,神經(jīng)網(wǎng)絡(luò)就是線性回歸的疊加而成,嘗試將網(wǎng)絡(luò)用數(shù)學(xué)表達(dá)出來,以三層為例:輸入層:矩陣X來表個樣本,其中每個樣本具有個輸?(特征)。隱藏層、輸出層權(quán)重及偏置:W(1)∈和隱藏層偏置b(1)∈R以及輸出層權(quán)重W(2)∈和輸出層偏置b(2)∈R偏置是個常變量,相當(dāng)于前文中的0)隱藏層輸出:H∈。輸出:O∈q隱藏層輸出:HXW(1b(1),輸出層: O=HW(2)+b(2).將隱藏層的輸出H,代入到輸出層(這其中使用到了線性代數(shù)中向量和矩陣相關(guān)的運(yùn)算,讀者可以動手做個公式的展開):O=(XW(1)+b(1))W(2)+b(2)=XW(1)W(2)+b(1)W(2)+b(2)=XW+b到這里,就會發(fā)現(xiàn)一個問題,雖然層次變多了,但最終的作用與一個單層的線性回歸網(wǎng)絡(luò)并無本質(zhì)區(qū)別,依然可以用一個單層網(wǎng)絡(luò)來表達(dá),并未起到多層的作用。為了解決這個問題,引入了激活函數(shù)。從前面的推導(dǎo),不難發(fā)現(xiàn),多層之所以沒有起到作用,是因?yàn)槊恳粚佣际蔷€性的,所以不管疊加多少層,最后得出來的網(wǎng)絡(luò)依然是線性的,效果和單層無區(qū)別。如果要使多層網(wǎng)絡(luò)有效,就需要打破線性關(guān)系,將線性變成非線性。比如輸入層到第一個隱藏層,運(yùn)算完成后,再增加一個非線性的激活處理:H=σ(XW(1)+b(1)),O=HW(2)+b(2)Sgm:可以將任意輸入值,映射到(01)輸出,非常方便概率問題的處理,應(yīng)用廣泛。比如分類問題,預(yù)測一張圖片中是一只貓還是一只狗,最后輸出值就是屬于某個類別的概率,比如輸出是貓的概率是0.9,是狗的概率只有0.05,那就認(rèn)為這張圖片是一只貓。雙曲正切(tanh):可以將任意輸入,映射到(-1,1)輸出。ReLU:線性修正單元。ReLU激活函數(shù),在神經(jīng)網(wǎng)絡(luò)中應(yīng)用非常廣泛,處理邏輯非常簡單。只要小于0,輸出就是0。大于零,輸出與輸入一致。直觀上的理解,該函數(shù)可以將小于0的部分篩選掉,只留下大于零的部分,這樣經(jīng)過多層處理后,就可以提煉出關(guān)鍵特征。o:多分類多分類問題是一種常見的問題,比如圖片分類,見上圖,假設(shè)最后輸出有3類,比3間可能有大量的隱藏層,最后一層有三個輸出值O1、O2、O3,分別代表貓、狗、鳥3最O1、O2、O3O1、O2、O3還有個更好的方式,將分類問題轉(zhuǎn)變成概率問題,分別計(jì)算出每種類別的概率,選O1O2O3三個類別分別對應(yīng)的概率:類別1的概率:O1/(O1+O2+O3),類別2的概率:O2/(O1+O2+O3)3O3/(O1+O2+O3)ef(x)=exSoftmax函數(shù):?=???ma)softmax特點(diǎn):可看出所有的j總有0≤j≤1,?負(fù)并且各?相加之和恒等于1。這樣一個多分類問題,最后的輸出層,就變成了各類別的概率。卷積:空間特征提取估計(jì)對AI有過一些了解的讀者,可能聽說過卷積神經(jīng)網(wǎng)絡(luò)(縮寫:卷積神經(jīng)網(wǎng)絡(luò)的一大精髓。前面提到圖像有兩大空間特征:平移不變性和局部相關(guān)性。比如圖片其實(shí)是一個由各像素點(diǎn)數(shù)值構(gòu)成的二維矩陣(可能有多通道)。卷積中有個關(guān)鍵的概念,叫做卷積核,常用的卷積核有1*1,2*2,3*3,5*5等幾種,2*24個數(shù)值構(gòu)成,如下圖所示,卷積核的運(yùn)算:直觀理解就是拿卷積核這個小矩陣逐列逐行按順序一行行去掃描圖片這個大矩陣,每掃到一個位置時,圖片覆蓋區(qū)域?qū)?yīng)位置的數(shù)值和卷積核上對應(yīng)的數(shù)值分別相乘(點(diǎn)積),最后再加總求和,得出該位置的一個數(shù)值,記錄下來作為結(jié)果矩陣的數(shù)值。圖片掃描完畢,將得出一個新的結(jié)果矩陣。比如掃到第一個初19,其他位置類似,計(jì)算過程如下:0×0+1×1+3×2+4×3=19,1×0+2×1+4×2+5×3=25,3×0+4×1+6×2+7×3=37,4×0+5×1+7×2+8×3=43.從網(wǎng)上找到一個動圖(鏈接),可以直觀的做個理解:用一個3*3卷積核去掃一個5*5的輸入矩陣。最后會得到一個3*3的輸出矩陣。正常情況下,如果不對輸入矩陣的行和列做全零填充,卷積之后,輸出矩陣的大小3*35*5的輸入矩陣,以列為例(行的理解類似),前面(即到5-3的位置)每走一步都有一個輸出,一直掃到輸入矩陣的末尾,所以輸出矩陣的列數(shù)是(5-3)/1+1=3。其中/1是因?yàn)槊看螔呙璧牟椒侵幌蚝笞咭晃唬▽?shí)際應(yīng)用時,針對大圖片,為減少計(jì)算量,有些模型可能采用每次跳多步,則需要相應(yīng)的除以步幅是對應(yīng)最后一位,就3*31。由此,再考慮到對輸入圖片行列首尾位置可能添加一些全零填充,可以推算出輸出矩陣大小計(jì)算公式:卷積的數(shù)學(xué)表達(dá):卷積為什么會在圖像處理上有效?筆者嘗試從卷積的運(yùn)算原理去理解:卷積可高效提取臨近像素間的相關(guān)特征,卷積核及偏差標(biāo)量是需要被訓(xùn)練的參數(shù)。前文提到過,圖片特征是局部相關(guān)的,卷積就能處理這個問題。卷積核每次掃輸入矩陣時,作用域是固定的小區(qū)域,并且是嚴(yán)格按行列順序逐步掃描的,這樣就可以有效提取到局部相關(guān)性特征。此外,針對圖像的平移不變性,卷積也是有效的。因?yàn)閳D片上的關(guān)鍵像素區(qū)域(比如識別狗,這只狗占據(jù)的那些像素區(qū)域稱為關(guān)鍵像素區(qū)域,其余像素可以看做是背景雜質(zhì)),不論處于圖片中什么位置,理論上對于同一個卷積核,在這些關(guān)鍵像素區(qū)域處理后得出的運(yùn)算結(jié)果是類似的。多輸入通道及多輸出通道RGBRGB三個數(shù)值表示。3-D卷積核,卷積核的每個通道和其對應(yīng)的輸入通道上的數(shù)值矩陣相運(yùn)算點(diǎn)積,最后各通道對應(yīng)的卷積結(jié)果再相加。以兩個通道做示例,見下圖:示例:結(jié)果矩陣(輸出矩陣)的第一位計(jì)算過程:(1×1+2×2+4×3+5×4)+(0×0+1×1+3×2+4×3)=56數(shù)學(xué)表達(dá)式:輸出通道也可以是多通道的,可以構(gòu)建一系列的3-D卷積核和輸入矩陣相作用,每個3-D卷積核將生成一個輸出通道(輸出矩陣)。在互相關(guān)運(yùn)算中,每個輸出通道先獲取所有輸?通道,再以對應(yīng)該輸出通道的卷積核計(jì)算出結(jié)果??梢岳斫鉃?,圖像中可提取的特征是復(fù)雜多樣的,比如顏色、輪廓線條等等。每個3-D卷積核的作用是有限的,只能提取到部分特征,需要大量的卷積核。比如,識別圖片中是否有一只貓,第一個3-D卷積核提煉到,相關(guān)像素點(diǎn)是不是綠色的。第二個3-D卷積核提煉到,相關(guān)像素點(diǎn)是不是紅色的。還有一些卷積核,可以提取黑量的3-D卷積核,對應(yīng)多個輸出通道。對于卷積的大致參數(shù)量,其實(shí)就是卷積核對應(yīng)的參數(shù)量,即??×??×??×??特殊的卷積:1*1卷積前面提到的常見的卷積,55有一個特殊的1*1卷積:??=??=1。這個卷積運(yùn)算完后,發(fā)現(xiàn)圖片的長寬并不會變化,但通道數(shù)會變化,因?yàn)橐唤M卷積核對應(yīng)一個輸出通道。可以用1*1卷積去調(diào)整輸出的通道數(shù)量。卷積的難以解釋性卷積神經(jīng)網(wǎng)絡(luò)中有個不是特別好的地方:解釋性不強(qiáng)。比如模型訓(xùn)練完成后,有大量的卷積核,但這些卷積核為什么是這樣子的,為什么是這些數(shù)值?這個卷積核的具體作用是什么?在大多數(shù)情況下,都是很難解釋清楚的。僅有少數(shù)卷積核的作用,可以較直觀的體現(xiàn),比如維基百科上有些例子:實(shí)際使用時,并不會人為構(gòu)建具體的卷積核,卷積核的參數(shù)值都是訓(xùn)練出來的,而且通??山忉屝暂^弱有人嘗試給CNN做出一些解釋并制作了一個網(wǎng)站感興趣的可以登錄看看,CNN explainer:https://poloclub.github.io/cnn-explainer/池化/匯聚oo:xoo、eoog還有一個比較常見的運(yùn)算:池化(Pooling操作:MaxPooling(最大值池化)AveragePooling(平均值池化)。顧名思義,對比前文講的卷積(先對應(yīng)位置做兩兩點(diǎn)積,最后再相加),PoolingPooling矩陣內(nèi)的最大值或者平均值(其中取最大值應(yīng)用更為廣泛,平均值在早前的神經(jīng)網(wǎng)絡(luò)中有些應(yīng)用)。此外,值得注意的是,每次滑動的步幅通常和Pooling矩陣的長度或?qū)挾纫恢?,比?*2的Pooling操作,通常每次滑動的步幅也是2,示例:找到一個網(wǎng)上的動圖(鏈接),可加深理解:直觀理解g的作用:axPng實(shí)現(xiàn)了抓局部窗口內(nèi)的關(guān)鍵信息,把一些不重要的信息忽略掉,對平移不變性可以做到更魯棒,過濾掉一些噪聲的影響。2*2Pooling,1/4。全連接(yoc)全連接常用于神經(jīng)網(wǎng)絡(luò)的最后幾層。以圖像處理為例,圖像可以理解為多通道的二維矩陣,經(jīng)過層層卷積、激活、池化等運(yùn)算后,得到最后的輸出矩陣,這時,可以把該矩陣按行的順序展平為一個一維向量,與下層的神經(jīng)元做全連接運(yùn)算(每個輸入值都和下一層的神經(jīng)元相運(yùn)算),而且可以構(gòu)建多層的全連接(其實(shí)就是前文介紹的MLP),示例:最后一層得出最終的輸出(可以看作一個向量),比如圖片分類或者識別問題,又Softmax0-1圖片屬于哪一類的概率。CNN有了前面的這些基礎(chǔ)知識(如卷積,Relu激活,MaxPooling,F(xiàn)ullyconnected,Softmax等CNNAlexNet、VGG、ResNets、GoogleLeNet等。LeNet為例,做個拆解剖析。LeNet1989年的時候就提出來了,廣泛的應(yīng)用在手寫數(shù)字識別場景。比如早期八九十年代,發(fā)信件、郵件等,需要填郵編,寫支票等場景,都涉及手寫數(shù)字。LeNet在這些場景,取得了很好的應(yīng)用效果。AIMNIST數(shù)據(jù)集為50,000個訓(xùn)練數(shù)據(jù),10,00028*28,因?yàn)?01010個(每個輸出值關(guān)聯(lián)一個數(shù)字)?;氐絃eNet網(wǎng)絡(luò)本身,LeNet(LeNet-5)由兩大部分組成:(?個卷積層(5×5卷積核?個d激活函數(shù)和一個平均池化層。全連接層(密集塊):由三個全連接層組成(見③)(RGB彩色圖片,原始圖像有三個輸入通道),也通常有多個輸出通道。每一個輸出通道都能提取到圖像的一些規(guī)律或者特征。LeNet第?1個輸入通道(黑白圖片對應(yīng)一個輸入通道),6個輸出通道。而第?6個輸入通道(6個5*5的卷積核。LeNet的第一層卷積輸出矩陣和輸入矩陣大小一致,原因是對輸入矩陣做了填充:在圖像矩陣的邊框位置,做全零填充,輸入矩陣會變大。對原始圖片矩陣在邊框上做全零填充,從而更好的保留在邊框位置上的像素輸入。如果不做任何填充,則輸出矩陣大小應(yīng)該是(28-5)/1+1=24,即24*24。由此,可以反推得到共填充了4行4列,也即前后各兩列,上下各兩行,真實(shí)的輸入矩陣大小變成了28+4=32,也即32*32,才能使得輸出矩陣大小保持在28*28。第二卷積塊中的輸入矩陣為14*14,不做填充,輸出矩陣大小為(14-5+1),也即10*10。sigmoid22池4倍(4個輸入值被處理化操作會大大減少計(jì)算量,因?yàn)闀苯訉⑤斎刖仃嚁?shù)倍的縮小。此外,值得注意的是,LeNet選用了平均值化,而不是最大池化,卷積神經(jīng)網(wǎng)絡(luò)發(fā)展到后面,發(fā)現(xiàn)最大池化通常效果更好,應(yīng)用比平均池化也更多。(密集塊165*516*5*5個元素的一維向量,基于此做全連接。LeNet做了三層全1010個數(shù)字(0~9)的輸出。像搭積木一樣構(gòu)建神經(jīng)網(wǎng)絡(luò)LeNetPyTorchLeNet的代碼寫出來,CNN開源開放的示例代碼,深入學(xué)習(xí)并實(shí)際運(yùn)行,這樣就能更清晰的理解了。本章節(jié)結(jié)尾處的動手實(shí)踐部分,已經(jīng)給出了詳細(xì)的指導(dǎo)書。LeNet的關(guān)鍵代碼如下(詳見參考《動手學(xué)深度學(xué)習(xí)PyTorch版》):net=nn.Sequential(net=nn.Sequential(nn.Conv2d(1,6,kernel_size=5,padding=2),nn.Sigmoid(),nn.AvgPool2d(kernel_size=2,stride=2),nn.Conv2d(6,16,kernel_size=5),nn.Sigmoid(),nn.AvgPool2d(kernel_size=2,stride=2),nn.Flatten(),nn.Flatten(),nn.Linear(16*5*5,120),nn.Sigmoid(),nn.Linear(120,84),nn.Sigmoid(),nn.Linear(84,10))52DPadding44Sigmoid2*2(激活輸出通道數(shù)*輸入通道數(shù)*卷積矩陣參數(shù),6*1*5*5=150。52D616。隨即Sigmoid2*26*16*5*5=2400。最后把輸出矩陣展平,進(jìn)行三次全連接運(yùn)算,激活函數(shù)依然使用Sigmoid。第一層12084個參數(shù)。最后一層全連接參數(shù)100~91010的分120+84+10=214。將上述幾部分的參數(shù)量相加,即可計(jì)算出LeNet的大致參數(shù)量級:2764。值得說明的是,實(shí)際參數(shù)量會稍多于該值。因?yàn)橛?jì)算深度學(xué)習(xí)網(wǎng)絡(luò)參數(shù)量時,通常為了簡便,略去了卷積、全連接等涉及的偏差標(biāo)量,偏差標(biāo)量不影響深度學(xué)習(xí)網(wǎng)絡(luò)的參數(shù)量量級。算法訓(xùn)練基本情況:動手實(shí)踐:搭建一個自己的神經(jīng)網(wǎng)絡(luò)-手寫數(shù)字識別CNN學(xué)習(xí)到這里,可能有些比較愛動腦筋的人會問,LeNet為什么只做兩個卷積塊,不能做更多的嗎?為什么激活函數(shù)選gm,3*3,7*7120、84,不能選其他的參數(shù)嗎?為什么只做三次全連接,不能做四層、五層等更多層嗎?等等系列問題。其實(shí)這里面并沒有嚴(yán)格的限制,還記得前文講過AI的訓(xùn)練過程,其實(shí)是個不斷的工程實(shí)踐、暴力計(jì)算的過程嗎?這些問題很多都涉及神經(jīng)網(wǎng)絡(luò)訓(xùn)練中的超參數(shù),需結(jié)合自身經(jīng)驗(yàn)不斷測試驗(yàn)證,綜合考慮模型最終的推理效果,訓(xùn)練成本等因素得出最佳實(shí)踐。AIAI煉丹師,對訓(xùn)練過程火候的控制,各項(xiàng)成分的配比等等,都需要日積月累不斷的知識積累、最佳實(shí)踐,方有小成。LeNetCNNLeNet做一些改進(jìn),構(gòu)造一個自己CNN3*3的,這樣計(jì)算量更小,訓(xùn)練更快;前面提到過,ReluCNN網(wǎng)絡(luò)中應(yīng)用更廣,激活函數(shù)可以試試等等,都可以動手嘗試。示例代碼:“”““”“3*3ReLu"""netnn.Sequential(nn.Conv2d(1,6,kernel_size=3,padding=1),nn.ReLU(),nn.MaxPool2d(kernel_size=2,stride=2),nn.Conv2d(6,16,kernel_size=3),nn.ReLU(),nn.MaxPool2d(kernel_size=2,stride=2),nn.Flatten(),nn.Linear(16*6*6,120),nn.ReLU(),nn.Linear(120,84),nn.ReLU(),nn.Linear(84,10))這樣的話,我們可以訓(xùn)練自己的CNN了??梢钥吹酵暾挠?xùn)練過程,算法的收斂情況,以及算法效果(訓(xùn)練誤差、泛化誤差等)等。LeNet做了為數(shù)不多的改動,就能得到更好的手寫數(shù)字識別CNN。當(dāng)然我們現(xiàn)在是站在了巨人的肩膀上,吸取了前人的大量經(jīng)驗(yàn)。人家是八九十年代,各種理論都尚不完善的情況下,就把LeNet做出來了,而且應(yīng)用效果很好,具有開創(chuàng)性。更多經(jīng)典CNN有了前面的積累,我們可以學(xué)習(xí)和理解更多的經(jīng)典CNN,比如AlexNet、VGG、ResNets、GoogleLeNet等。AlexNet2012ImageNetCV領(lǐng)域重回CNNLeNetPyTorch版》中的一個對比圖,見下:LeNet28*28的手寫數(shù)字黑白圖片。AlexNet1000類圖像識別問題,數(shù)據(jù)集使用了ImageNet,輸入圖片是224*224RGB彩色圖片。核心模塊,依然是卷積、激活、池化、全連接這些。不難看出,8CNN更簡單的ReLU。使用更有效的最大值匯聚。此外,采用了GPU做訓(xùn)練。AlexNetCNN做的更深了,效果就變的很好,一舉奪得了ImageNet圖像識別大賽冠軍。后面的人受此啟發(fā),逐步將網(wǎng)絡(luò)做的更深更大,神經(jīng)網(wǎng)絡(luò)開始真正進(jìn)入了深度學(xué)習(xí),出現(xiàn)了VGG、ResNets、GoogleLeNet等網(wǎng)絡(luò),網(wǎng)絡(luò)的設(shè)計(jì)也走向了模塊化,取得了更好的效果,直到后面準(zhǔn)確率已經(jīng)超越了人類。動手實(shí)踐:在云上搭建深度學(xué)習(xí)notebook開發(fā)環(huán)境公共云提供了極大便利,讓開發(fā)測試變得簡單,計(jì)算資源便捷可得,隨用隨開。以ECS(GPU實(shí)例Ubuntu18.0464pytorchPyTorch(該學(xué)習(xí)包含有大量示例代碼,且配套有教程,適合入門學(xué)習(xí)):Step1:創(chuàng)建ECS實(shí)例,設(shè)置用戶名及登錄密碼(使用ecs-user登錄,如果使用root安裝,后續(xù)部分安裝包會提示有權(quán)限風(fēng)險)。注意:如果選擇GPU實(shí)例,需在實(shí)例創(chuàng)建時選擇安裝cuda11.4。ssh登錄IP中加IP(IP”,即可獲取)。Step3:ssh到云ECS。Step4:在ECS上安裝相關(guān)軟件包:sudoapt-getupdate安裝gcc編譯器()sudoaptinstallbuild-essential安裝Python3.8為例:sudoaptinstallpython3.8安裝miniconda:下載安裝包:注意miniconda包需選擇對應(yīng)python版本的包wget/miniconda/Miniconda3-py38_23.3.1-0-Linux-x86_64.sh運(yùn) 行 安 裝 腳 本 , 并 初 始 化 : bashMiniconda3-py38_23.3.1-0-Linux-x86_64.sh(可在2中完成)初始化終端 Shell,以便運(yùn)?conda。~/miniconda3/bin/condainitbashcondabash創(chuàng)建?可選condacreate--nameaigcpython3.8-y(7)激活aigc環(huán)境可選)condaactivateaigc安裝jupyterpipinstalljupyter安裝pyTorchcondainstallpytorchtorchvisiontorchaudiocpuonly-cpytorch安裝d2l包:pipinstalld2l==0.17.6Step5:安裝解壓工具及git工具:sudoaptinstallunzip 安裝git:sudoinstallgitStep6:下載d2lnotebook示例代碼,并解壓:mkdird2l-zh&&cdd2l-zh wgethttps://zh-v2.d2l.ai/d2l-zh-2.0.0.zipunzipd2l-zh-2.0.0.zipStep7:本地便攜機(jī)上執(zhí)行如下命令,將云ECS的8888端口映射到本地:ssh-L8888:localhost:8888ecs-user@76Step8:在ECS上運(yùn)行jupyter:jupyternotebookStep9jupyter(notebookURL):http://localhost:8888/?tokenrWxo4Uo***環(huán)境安裝參考資料:https://zh.d2l.ai/chapter_installation/index.html講解視頻為進(jìn)一步方便學(xué)習(xí),錄制了講解視頻,詳見:https:///video/BV17oN3eAEbN/?vd_source=0c5a39664e27af522bfcd1e74b9780a8AIGC及大模型硅基智能s碳基智能:C帶給我們的驚喜AI的發(fā)展通常局限在特定領(lǐng)域的特定問題,ChatGPTLLM在文本摘要/概AIGC在智能問答、文生圖、文生視頻等場景迅速迎來火爆應(yīng)用,掀起了新一輪AI熱潮。企業(yè)、科研機(jī)構(gòu)等AIGCLLM、文生圖等模型如雨后春筍般涌現(xiàn),并在電商、泛娛樂、金融、政企等行業(yè)應(yīng)用開來,帶來了新變革:LLM覆性革新能力,正在重塑搜索行業(yè)。NPC隆人等。DBA,圖像/視頻類的設(shè)計(jì)(如短視頻、服裝設(shè)計(jì)、人物風(fēng)景畫作、插畫、海報等),輔視頻創(chuàng)作等。其他無限可能:DependsYourImagination。AIGC各細(xì)分領(lǐng)域還在日新月異的發(fā)展,不斷涌現(xiàn)顛覆式的新應(yīng)用,大家可以拭目以待。比如,近期OpenAI發(fā)布了Sora,在文生視頻領(lǐng)域取得了新突破,在短視頻、影視制作、元宇宙等領(lǐng)域帶來新的沖擊和想象空間。未來,借助AIGC,比如文生文、文生代碼、文生SQL人也能拓展自己的職業(yè),比如成為插畫師、程序員、短視頻大V、作家、編劇、導(dǎo)字AIGC技術(shù)的不斷成熟,使用門檻的不斷降低,這些都將不再是夢想,正在快速的實(shí)現(xiàn)。無論是工作、生活、學(xué)習(xí)等方方面面,AIGC都正在給我們打開一扇大門。創(chuàng)意將變學(xué)生的基礎(chǔ)素養(yǎng)來學(xué)習(xí)和培養(yǎng)。AIGC能發(fā)展這個更高的視角去看這個事情。人類的智能由一個個人類個體構(gòu)成,往往是絕大部分個體對整體智能的影響是微乎其微、可忽略不計(jì)的。目前的知識體系主要源自歷史長河中少數(shù)個體的突出貢獻(xiàn),逐步積累疊加、緩慢突破而成。但發(fā)展過程中碳基生命有個重大缺陷:相比宇宙的歷史長河,人類個體的生命僅僅數(shù)十年,太過短暫。且生命個體誕生后,知識幾乎是空白的,也即知識無法由后代直接繼承,每個新生個體需要重新開始一點(diǎn)點(diǎn)學(xué)習(xí)。以一個程序員視角看人類智能的發(fā)展,有點(diǎn)近似一個死循環(huán):一個生命個體出生后,類似一個近乎全0的初始化狀態(tài),然后需要耗費(fèi)十?dāng)?shù)年甚至幾十年時間不斷的學(xué)習(xí)積累,才能掌握前人的一部分智慧,極少數(shù)的天賦異稟者可能會有一些突破,然后個體又會走到生命盡頭。由誕生的新生生命重新清零,回到初始化狀態(tài),在大量的個體、不斷的循環(huán)中取得一點(diǎn)一滴量變,進(jìn)而到質(zhì)變的向前突破。未來的硅基智能帶來的想象力在于知識可以繼承,不斷向前迭代發(fā)展,大模型似乎隱約讓人看到了實(shí)現(xiàn)AGI(通用人工智能)的希望。不過話說回來,目前的大模型雖然在很多場景有驚艷表現(xiàn),但離能自我理解、發(fā)現(xiàn)、分析、甚至獨(dú)立思考創(chuàng)造、具備認(rèn)知智能甚至自我意識的AGI還相距甚遠(yuǎn),一切才剛剛拉開序幕。大語言模型(LLM)LLM、知識庫+LLM等幾大熱門應(yīng)用講解基本原理。針對LLM在LLM存在的“知識繭房”缺陷,思考解決方(知識庫+LLM、釘釘智能問答機(jī)器人)的詳盡實(shí)操指導(dǎo)書,使讀者可以零基礎(chǔ)構(gòu)建自己專屬的智能問答應(yīng)用。語言的數(shù)據(jù)特征前面主要講了圖像、視覺相關(guān)的內(nèi)容。還有一塊和語言相關(guān)的也很重要,如文本、音頻等,與之關(guān)聯(lián)的是自然語言處理(英文簡寫為NLP)。語言的數(shù)據(jù)特征是:時()字詞間都是有時間線先后順序的,這叫時序特征。字詞語句在一段文字中,存在上網(wǎng)上曾流行的一個段子。一個女生跟一個男生約會,女生跟男生說:如果你到了我雖然是一模一樣的詞句,但意思卻截然不同。另外,很多語言都存在字詞多音多義,疑問反問等多種修辭手法,也會導(dǎo)致相同的詞句本身就存在多種含義。各字詞在語言中的權(quán)重,重要程度也不相同,有所謂的關(guān)鍵字詞,核心詞句。這些問題都需要NLP算法來解決和處理。除了近期大火的大語言模型,NLP領(lǐng)域前期也誕生了系列的深度神經(jīng)網(wǎng)絡(luò),如RNN、GRU、LSTM等。文本轉(zhuǎn)向量(數(shù)字化)AI算法訓(xùn)練只能處理數(shù)字化后的數(shù)據(jù),那語言中的字、詞、句、段落等怎么轉(zhuǎn)成數(shù)字呢?這個問題本身就是一個專門的技術(shù)領(lǐng)域。我們只介紹兩個基礎(chǔ)的方法,讓大家有個認(rèn)識:One-Hot編碼、Embedding算法。-t編碼原理:對于自然語言,輸入是一段文本,在中文里就是由一個個字、詞標(biāo)點(diǎn)符號組成,這些最基本的不再拆解的字詞、標(biāo)點(diǎn)符號、短語、前后綴等元素就稱為詞元,英文名稱叫Token。One-Hot編碼的基本思路是將句子拆解成詞元,針對詞元構(gòu)建一個詞表(有些書上也稱作字典),然后借助詞表中的每個詞元所處的位置編號來表示該詞元。任何語言,基本詞元數(shù)量總是有限的,詞元本身就能構(gòu)建一個詞表。比如漢語,漢字肯定是有數(shù)量上限的。將文本先按一定規(guī)則拆解成詞(或叫就能從詞表中查到這些詞元對應(yīng)的位置編碼了,以該詞元在詞表中的位置編碼表示該詞元,也就實(shí)現(xiàn)了詞元數(shù)字化,進(jìn)而實(shí)現(xiàn)整個句子、文本的數(shù)字化。引用網(wǎng)上的一個示例(詳見鏈接),給定文本:我們相信AI可以讓世界變得更美好。先拆解成詞元(存在多種拆解方式):按字Token化:我/們/相/信/A/I/可/以/讓/世/界/變/得/更/美/好/。按詞Token化:我們/相信/AI/可以/讓/世界/變得/更/美好/。按Bi-GramToken化:我們/們相/相信/信A/AI/I可/可以/以讓/讓世/世界/界變/變得/得更/更美/美好/好。TokenToken是詞表的大?。?萬個詞元的詞表,N4Token10Token都可表示為一個向量,比如「我」:[1,0,...0],向量的長度為詞表大小N。(說明:實(shí)際應(yīng)用不會簡單的用1/0來表示,因?yàn)槊總€字在句子中的作用是不一樣的,會給不同的Token賦予不同的權(quán)重)。對于一段文本,可將每個Token結(jié)合起來,采用拼接、求和、逐元素相乘、取平均值或最大值等方法。這樣,對于任意文本,都能將其表示為固定大小的N維向量。就實(shí)現(xiàn)了文本轉(zhuǎn)成數(shù)字了。稍加思考,會發(fā)現(xiàn)One-Hot編碼這種處理方式過于簡單,存在諸多固有缺陷:數(shù)據(jù)維度過高(N維((語義鴻溝):比如“我愛吃蘋果”、“我愛用蘋果”,前者是水果,后者可能是手機(jī),也可能是電腦等,無法判斷。此外,One-Hot編碼難以處理文本中詞元的順序。把句子中的字詞調(diào)換順序,比如主語和賓語調(diào)換順序,如“一條狗咬了他”和“他咬了一條狗”,“我喜歡你”和“你喜歡我”句子中的基本字詞完全一樣,One-Hot編碼會得出相同的表示,實(shí)際卻是完全不同的意思。g算法:其本身就是個AI模型,采用深度神經(jīng)網(wǎng)絡(luò)等方法,使用樣本數(shù)TokenD(DN,256768等DTokenNLP的不斷發(fā)展,EmbeddingToken的向量化,給大語言模型輸入任意一句話、數(shù)段話,都可以輸出一個固定長度的向量化表示。g是用一組稠密向量來表示一段文本(QA推薦等Embedding模型本身就是要訓(xùn)練的,而且通常和應(yīng)用場景對應(yīng)的語料強(qiáng)相關(guān),很難有一個適用于全部場景的模型。比如,訓(xùn)練了一個模型,在金融場景好用,在政務(wù)場景可能就效果欠佳。在中文場景有用,可能英語場景就不行了。此外,這個稠密向量本身各維上的數(shù)值是不具有可解釋性的,比如輸出是256256個數(shù)字來表示對應(yīng)的輸入文本,每個數(shù)字都有一些特殊含義,但具體是什么含義,本身是難以解釋的。可以簡單的把Embedding模型當(dāng)作一個黑盒,輸入文本,模型可以輸出一個固定大小的向量來表征該輸入的文本。值得一提的是,上文描述的文本轉(zhuǎn)成向量,針對向量的存取,LLM還帶火了一個數(shù)LLM檢索增強(qiáng)生成)等名詞,其核心就是將已有的知識文本做拆分,再轉(zhuǎn)向量,形成知識庫,針對輸入的問題,也轉(zhuǎn)成向量,再到知識庫中做向量相似檢索,就能匹配出和該問題相關(guān)的文本了。NLP領(lǐng)域還是圖像領(lǐng)域,都是相通的。我們可以再看一個圖像領(lǐng)域的例子?;叵肭拔尼槍D像的深度學(xué)習(xí)講解,其中詳細(xì)拆解了一個經(jīng)典的卷積神經(jīng)網(wǎng)絡(luò):LeNet,如下:我們把最后一層(輸出層)去掉,輸出層的前一層是含84個參數(shù)的全連接,對應(yīng)8484個輸出值就可以理解為一個向量,用于表征這副輸入圖像的特征。我們可以訓(xùn)練一個CNN,如果算法的效果訓(xùn)練的很好,理論上,各個相同的手寫數(shù)字圖像所輸出的向量相似度很高(相似度算法如歐式距離、cosine相似度等,讀者可以自行搜索相似度的常用算法原理),而對于不同的手寫數(shù)字圖像所輸出的向量,相似度就不高。這種方法在人臉識別等場景使用廣泛。應(yīng)用開發(fā)新范式:對話即編程AIGCIT行業(yè)帶來了系列革新,其中之一是用戶輸入需求描述(常稱為提示量的答案。這將給應(yīng)用開發(fā)提供便利,大大降低應(yīng)用開發(fā)的技術(shù)門檻。以ChatGPT舉例:load_dotenv(find_dotenv())#readlocal.envload_dotenv(find_dotenv())#readlocal.envfileopenai.api_key =os.getenv('OPENAI_API_KEY’)defget_completion(prompt,model="gpt-3.5-turbo"):messages=[{"role":"user","content":prompt}]response=openai.ChatCompletion.create(model=model,messages=messages,temperature=0,#thisisthedegreeofrandomnessofthemodel'soutput)returnresponse.choices[0].message["content"]prompt=f"""AIGC"""response=get_completion(prompt)print(response)=find_dotenv_load_dotenv,importdotenvfromimportopenaiimportos如下是ChatGPT給出的答案示例:親愛的部門全員,在當(dāng)前AIGC(人工智能、物聯(lián)網(wǎng)、大數(shù)據(jù)、云計(jì)算)浪潮下,我們的工作和生活方式都將發(fā)生巨大變革。唯有自我變革,我們才能在這個激動人心的時代中開創(chuàng)未來。我們需要不斷學(xué)習(xí)和適應(yīng)新技術(shù),不斷提升自己的能力和素質(zhì),不斷挑戰(zhàn)傳統(tǒng)的思維方式和工作模式。只有勇于變革,才能在激烈的競爭中立于不敗之地。讓我們共同努力,相互鼓勵,共同成長,共同開創(chuàng)未來!祝好!我們簡單對應(yīng)用代碼做個evepmpt”部分,也即把自己想要模型解決的問題,把自己的需求描述清楚即可。其余部分的代碼,主要是導(dǎo)入對應(yīng)的模塊,按照接口調(diào)用的格式填寫好相對固定的接口參數(shù)。基本上0代碼基礎(chǔ)的人,也能快速完成應(yīng)用開發(fā)。因?yàn)槠渲凶顬閺?fù)雜的部分,已交給AI模型了。設(shè)想下,如果要自己編程實(shí)現(xiàn)一個郵件內(nèi)容生成的程序,那得多么的復(fù)雜,門檻何其高。此外,業(yè)界也有大量的文生代碼大模型陸續(xù)發(fā)布,GitHubCopilot作為其中的典型代表,一經(jīng)推出就有驚艷表現(xiàn),甚至一度引發(fā)了碼農(nóng)們的恐慌。這就是AIGC的魅也即寫好AIAI言也能成為編程語言,跟AI模型使用自然語言對話,就實(shí)現(xiàn)了復(fù)雜的編程,能開發(fā)復(fù)雜的應(yīng)用??梢灶A(yù)見的是,未來編程的門檻會持續(xù)降低。AIGC是一把雙刃劍,在某些方面正在顛覆和影響我們的工作和生活,避免被利刃所傷的最好辦法是:成為掌控利刃之人。積極的把它當(dāng)做提效工具用起來,掌握它,讓它成為提高效率的工具和幫手。LLM在實(shí)際應(yīng)用中的難點(diǎn)問題ChatGPTLLMNLP、AIGC熱潮。本文不去介紹ChatGPTTransformerLLMLLM的固有缺LLM的幾大常用功能,比如:LLM動對話等。摘要/概括:輸入一段話、一篇短文甚至是一篇技術(shù)論文,LLM要和概括,可以精煉出關(guān)鍵內(nèi)容內(nèi)容。推斷:比如輸入一段話,判斷說話的這個人是開心還是憤怒。文本轉(zhuǎn)換:比如翻譯,輸入一段中文,轉(zhuǎn)換成英文等。文本擴(kuò)展:比如現(xiàn)在很多網(wǎng)上用AIGGAIGCChatGPT,只需要輸入提示語句和問題描述(prompt),模型就能給出類人智能的答復(fù),表現(xiàn)驚艷,在智能問答等場景迅速迎來火爆應(yīng)用。但隨著應(yīng)用的不斷深入,大家發(fā)現(xiàn)不論是哪家的LLM,給出的答案,時常出現(xiàn)胡說八道的問題。究AI的數(shù)據(jù)本質(zhì),也是采用大量數(shù)據(jù)樣本做訓(xùn)練得出的,模型一旦訓(xùn)練完成,對于數(shù)據(jù)樣本外的知識一無所知,我們給這個現(xiàn)象取個非常形象的名字:知識繭房。LLM的知識局限在所訓(xùn)練的數(shù)據(jù)樣本中,類似被包裹在一個繭房里面一樣。由于缺乏繭房之外的知識,所以面對需要額外知識的問題,則只能根據(jù)模型已有邏輯盲目的推測一個答案,問答效果自然很難保障,甚至驢唇不對馬嘴。以企業(yè)構(gòu)建智能問答系統(tǒng)為例,企業(yè)的私域知識因涉密、商業(yè)價值等原因,不對外開放,無論哪家的LLM,通常都缺乏企業(yè)私域知識。在涉及私域知識的問答中,通LLMChatGLM-6BRDSRDS數(shù)據(jù)庫在公網(wǎng)上已發(fā)布了大量資料,其他廠商也都有類似產(chǎn)品及資料??磫柎鸨憩F(xiàn):不難發(fā)現(xiàn),答案存在明顯錯誤,如:阿里云RDS的產(chǎn)品名稱里不應(yīng)該出現(xiàn)"amazon"。 阿里云數(shù)據(jù)庫沒有名字為Oracle”“DBManager和“DBDesigner”等服務(wù)。TairADBLindorm等阿里云獨(dú)有的數(shù)據(jù)庫,則給出的答案更是問題百出。也即問題越涉及私域知識,則LLM給出的答案通常就更加離譜。讀者可自行做個測試。此外,的知識繭房問題還表現(xiàn)在,的知識是有時效性缺陷的,比如在四月LLMLLM的模型參數(shù)做多大,哪怕有一天訓(xùn)練了一個超級LLM,把已有的知識都納入了,這個問題依然是存在的。因?yàn)殡S著時間的流逝,總是不斷有新知識新信息產(chǎn)生,知識和信息本身是難以窮盡的。LLM“知識繭房”破解之法:RAGLLM補(bǔ)充目前不具備的知識。如直接做訓(xùn)練,或微調(diào)訓(xùn)練。二、將私域知識加工成知識庫,結(jié)合大模型構(gòu)建問答系統(tǒng)。如果用私域數(shù)據(jù),訓(xùn)練一個企業(yè)獨(dú)有的LLM,存在諸多挑戰(zhàn):成本過高,動輒數(shù)百萬美金起步,且需要專業(yè)技術(shù)團(tuán)隊(duì)。另一方面,企業(yè)的私域數(shù)據(jù)通常是很有限的,即便是做微調(diào)訓(xùn)練,針對已使用大量語料訓(xùn)練且動輒百億參數(shù)量的大模型,較難出效果。當(dāng)下更有效便捷的處理方式是,將企業(yè)私域數(shù)據(jù)通過文本處理、分割、向量化等步驟,加工成企業(yè)知識庫。結(jié)合語義檢索和LLM,可構(gòu)建一個高效、智能、精準(zhǔn)的問答系統(tǒng)。相比傳統(tǒng)問答系統(tǒng),該系統(tǒng)具備更高的智能化和自適應(yīng)性,不僅可以實(shí)現(xiàn)基本的問答功能,還能夠?qū)栴}進(jìn)行智能化分析、歸納和推理,提供更加精準(zhǔn)和全面的答案,而且具備LLM的知識概括、推斷、轉(zhuǎn)換、擴(kuò)展等能力。下圖依然采用清華大學(xué)的開源ChatGLM-6B,僅灌入一篇產(chǎn)品文檔構(gòu)建成知識庫,LLM,答案精準(zhǔn),且更簡潔專業(yè)。知識庫是企業(yè)私域知識問答系統(tǒng)的核心部分,它包含了企業(yè)的專屬知識和最新信息,這些通常是大語言模型在訓(xùn)練時無法獲取的信息。LLM結(jié)合知識庫,可破解“知識(可能涉及多條,而且這些知識可能散落在多個文檔的不同地方)。然后作為提示詞(prompt)的一部分,輸入給LLM,結(jié)合LLM的概括、推理、擴(kuò)展等能力,由LLM加工成最終的問題答案,返回給用戶。Prompt模板示例:PROMPT_TEMPLATE="""PROMPT_TEMPLATE="""已知信息:{context}無法回答該問題”,禁止在答案中添加編造成分,答案請使用中文。問題是:{question}"""questioncontext就是知識庫中檢索出來LLMpromptLLM結(jié)合這些知識做歸納,給出最終答案。當(dāng)然這僅僅是一個chatGPTLLMLLM設(shè)置角色,給角色定義一些性格,比如扮演一個說話謙虛禮貌的客服,或者模仿某個名人的說話方式等等,各種花樣玩法和有意思的應(yīng)用,讀者可以嘗試。知識庫+LLM智能問答系統(tǒng)的構(gòu)建流程筆者在阿里云數(shù)據(jù)庫團(tuán)隊(duì)供職,曾和阿里云數(shù)據(jù)庫NoSQL團(tuán)隊(duì)共同規(guī)劃設(shè)計(jì)過企業(yè)知識庫+LLMPDFdocx將這些數(shù)據(jù)加工成企業(yè)知識庫,通常涉及如下步驟:數(shù)據(jù)工程師準(zhǔn)備好私域源數(shù)據(jù)(文檔、圖片、JSON、SQL等)。對源數(shù)據(jù)做預(yù)處理,統(tǒng)一轉(zhuǎn)換成文本格式。textchucks。textchuck轉(zhuǎn)換成對應(yīng)的向量,即前文介embedding過程。將轉(zhuǎn)換后的各個向量,及對應(yīng)的數(shù)據(jù)信息存放到向量數(shù)據(jù)庫。部署和維護(hù)一套向量數(shù)據(jù)庫。用戶輸入查詢問題。引入或開發(fā)合法合規(guī)校驗(yàn)系統(tǒng),校驗(yàn)用戶問題的合規(guī)性。將查詢問題轉(zhuǎn)換成向量。調(diào)用向量數(shù)據(jù)庫查詢接口,做語義檢索(向量相似查詢)。topK(top5、top10等)關(guān)聯(lián)內(nèi)容。topKprompt模板。promptLLM,LLM返回答案。LLM實(shí)際應(yīng)用場景,構(gòu)建更多的能力,如:全量數(shù)據(jù)、增量數(shù)據(jù)、數(shù)據(jù)更新的持續(xù)加工。文本預(yù)處理、文本分割、embedding等算法的開發(fā)和引入,結(jié)合業(yè)務(wù)進(jìn)行迭代優(yōu)化。索,構(gòu)建多路召回能力。LLMCPU/GPUHA,災(zāi)備;權(quán)限管理;數(shù)據(jù)加密;安全審計(jì)等。據(jù)緩存。此外,即便是有了知識庫的加持,能提升私域知識問答的效果,但依然面臨諸多挑戰(zhàn),比如:實(shí)際使用時,用戶問的問題可能是五花八門的。一個問題的答案,可能不僅涉及知識庫,可能涉及到查詢其他系統(tǒng),如公司的數(shù)據(jù)庫系統(tǒng),網(wǎng)上的公開信息等等??赡苄枰O(shè)計(jì)一個前置系統(tǒng),先將問題做個分類,根據(jù)不同類型的問題構(gòu)建不同的處理方式。決定問答質(zhì)量除了LLM本身能力外,還有幾大關(guān)鍵因素:PDF、docx、文本這些文件外,還有些數(shù)據(jù)是存放在數(shù)據(jù)庫中的,還有PDF圖表等,這些使得語料轉(zhuǎn)文本這一步就很有挑戰(zhàn)。BERT(詳見等。文本轉(zhuǎn)向量embedding有一個適用于全部場景的embedding戰(zhàn)text2vec(詳見(能就沒有這個問題相關(guān)文字的直接描述。最后,還需要開發(fā)一套系統(tǒng),能將這一系列的數(shù)據(jù)加工和使用流程做統(tǒng)一編排。對外提供標(biāo)準(zhǔn)接口,供應(yīng)用開發(fā)者便捷使用。有些業(yè)界使用較廣的開源框架,如Langchain。Langchain簡介Langchain可以理解為是一個知識向量化的數(shù)據(jù)加工平臺/框架(詳見),集成了文+LLMLangchain實(shí)現(xiàn)的功能:支持用戶導(dǎo)入私域知識(如.txt、.md、.docx、.pdf等多種文檔格式)。知識庫自動加工:文本分割、向量轉(zhuǎn)換、向量存取等由平臺自動完成。支持全量數(shù)據(jù)持續(xù)導(dǎo)入(每一篇文檔為一個知識庫,問答時支持選擇知識庫)。暫不支持增量,暫不支持文檔內(nèi)的數(shù)據(jù)更新。topK關(guān)聯(lián)內(nèi)容,填入prompt,調(diào)用LLM得到答案,返回給用戶。embeddingLLM,可查看代碼,配置文件中的如下變量:embedding_model_dict={embedding_model_dict={"ernie-tiny":"nghuyong/ernie-3.0-nano-zh","ernie-base":"nghuyong/ernie-3.0-base-zh","text2vec":"GanymedeNil/text2vec-large-chinese"}llm_model_dict:chatglm-6b-int4-qe、chatglm-6b-int4、chatglm-6b-int8、chatglm-6bchatyuanmossChatGLM-6B是清華大學(xué)的開源模型,可以處理自然語言文本數(shù)據(jù),并能進(jìn)行語言生成,在中國開源社區(qū)用的較廣。向量檢索、存儲:FAISS。使用Langchain+chatGLM構(gòu)建知識庫方案,建議讀者可以參考“系列動手實(shí)踐”中對應(yīng)的實(shí)戰(zhàn)指導(dǎo)書,自行安裝使用一遍。操作界面示例:Langchain的優(yōu)點(diǎn):實(shí)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 電梯底坑施工方案
- 西坪外墻施工方案
- 宜城水下封堵施工方案
- 人工拆除煙囪施工方案
- 思辯技能測試題及答案
- 2025年護(hù)理三級產(chǎn)科試題及答案
- 5言自編現(xiàn)代詩5句
- 低溫電磁閥設(shè)計(jì)
- 5個環(huán)境描寫的開頭
- c++中環(huán)形緩沖區(qū)數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)
- 簡愛人物形象分析
- 云南省地圖含市縣地圖矢量分層地圖行政區(qū)劃市縣概況ppt模板
- 光伏發(fā)電工程達(dá)標(biāo)投產(chǎn)創(chuàng)優(yōu)工程檢查記錄
- 領(lǐng)導(dǎo)干部要樹立正確的價值觀、權(quán)力觀、事業(yè)觀課件
- 體育社會學(xué)(第一章)盧元鎮(zhèn)第四版課件
- 數(shù)電課件康華光電子技術(shù)基礎(chǔ)-數(shù)字部分第五版完全
- DB21-T 2041-2022寒區(qū)溫拌瀝青路面工程技術(shù)規(guī)程
- 語文主題學(xué)習(xí)整本書閱讀指導(dǎo)課件
- 職業(yè)教育課堂教學(xué)設(shè)計(jì)(全)課件
- 工程項(xiàng)目造價控制措施
- 心電監(jiān)護(hù)操作評分標(biāo)準(zhǔn)
評論
0/150
提交評論