寫在最前
本故事講的是關(guān)于機器學(xué)習(xí)的基本概念和訓(xùn)練過程。通過這個故事惋嚎,你將對機器學(xué)習(xí)有一個直觀的了解杠氢。隨后,當(dāng)你翻閱關(guān)于機器學(xué)習(xí)的書籍時另伍,也許會有不同的感受鼻百。如果你有感覺到任督二脈被打通了,那我真是太高興了。如果沒有温艇,我再努努力 ?(?_|
在這個 AI 內(nèi)容生成泛濫的時代因悲,依然有一批人"傻傻"堅持原創(chuàng),如果您能讀到最后中贝,還請點贊或收藏或關(guān)注支持下我唄囤捻,感謝 ( ̄︶ ̄)↗
機器學(xué)習(xí)是什么?
丹尼爾:蛋兄邻寿,今天的天氣真好啊
蛋先生:嗯蝎土,是啊,陽光明媚
丹尼爾:對了绣否,蛋兄誊涯,什么是機器學(xué)習(xí)啊蒜撮?
蛋先生:(lll¬ω¬) 你這暴构,話題轉(zhuǎn)得讓人猝不及防啊,咋這么好學(xué)呢段磨!
丹尼爾:只是愛瞎折騰取逾,隨便聊聊嘛 (~ ̄▽ ̄)~
蛋先生:好吧,先來說說“學(xué)習(xí)”二字苹支。你覺得人類是怎么學(xué)習(xí)的砾隅?
丹尼爾:就是讀讀書、聽聽課唄
蛋先生:沒錯债蜜。你所說的讀書和聽課是獲取信息的方式晴埂。然后我們把這些信息傳遞給大腦,大腦會進行整理和加工寻定,從而理解這些信息儒洛,之后我們還可以學(xué)以致用
丹尼爾:那機器也這樣嗎?
蛋先生:機器學(xué)習(xí)的方式類似狼速。我們需要給機器一堆訓(xùn)練數(shù)據(jù)(信息)琅锻,讓它自己去找出其中的規(guī)律(理解),然后讓它處理類似的問題(學(xué)以致用)
丹尼爾:哇向胡,真是太神奇了浅浮!
蛋先生:根據(jù)學(xué)習(xí)方式的不同,機器學(xué)習(xí)可以分為監(jiān)督學(xué)習(xí)捷枯、無監(jiān)督學(xué)習(xí)等,其中最常用的就是監(jiān)督學(xué)習(xí)了
什么是監(jiān)督學(xué)習(xí)专执?
丹尼爾:監(jiān)督學(xué)習(xí)是啥淮捆?
蛋先生:先來說說“監(jiān)督”二字。你要監(jiān)督孩子做作業(yè),前提是你手上有標(biāo)準(zhǔn)答案攀痊,才能衡量對錯桐腌,對吧?
丹尼爾:嗯苟径,所以監(jiān)督學(xué)習(xí)是?
蛋先生:監(jiān)督學(xué)習(xí)就像監(jiān)督機器做家庭作業(yè)一樣案站。我們提供題目(訓(xùn)練數(shù)據(jù)),同時也提供標(biāo)準(zhǔn)答案(標(biāo)簽)棘街,這樣機器才能“知錯能改”
丹尼爾:這聽起來挺有趣的蟆盐!您繼續(xù)
蛋先生:想象一下,你有一堆加法題目和答案遭殉,比如 1+1=2石挂,2+2=4 等等,但你事先并沒有告訴機器加法的計算規(guī)則险污。機器會不斷地嘗試并對自己的答案進行調(diào)整痹愚,最終找到輸入到輸出的對應(yīng)關(guān)系,從而學(xué)會了加法
丹尼爾:哇塞蛔糯,比我還厲害拯腮!我學(xué)加法的時候可是先從數(shù)手指開始的,機器直接從題目和答案里學(xué)會了
蛋先生:是啊蚁飒,一旦機器學(xué)會了加法动壤,它就能獨立解決新的加法題目了
機器學(xué)習(xí)都學(xué)了些什么?
丹尼爾:我挺好奇的飒箭,機器學(xué)習(xí)最終學(xué)到了什么呢狼电?
蛋先生:其實,你經(jīng)常聽到某某大模型有多少億的參數(shù)弦蹂,這些參數(shù)就是機器學(xué)習(xí)最終學(xué)到的“知識”肩碟。具體來說,參數(shù)分為權(quán)重參數(shù)和偏置參數(shù)
丹尼爾:權(quán)重參數(shù)和偏置參數(shù)凸椿?這些到底是啥玩意兒削祈?
蛋先生:我們用最簡單的線性回歸來解釋吧。線性回歸的基本公式是:y = wx + b脑漫。這里的 x 是我們給機器的輸入數(shù)據(jù)(訓(xùn)練數(shù)據(jù)髓抑,也叫特征),而 y 則是對應(yīng)的輸出數(shù)據(jù)(標(biāo)簽)优幸,而 w 和 b 就是機器要學(xué)習(xí)的權(quán)重參數(shù)和偏置參數(shù)
丹尼爾:為什么叫 w 為權(quán)重參數(shù)吨拍,叫 b 為偏置參數(shù)呢?
蛋先生:因為 w 決定了每個 x 的重要程度网杆,影響了 x 對最終輸出 y 的貢獻羹饰。而 b 就像一個基準(zhǔn)線伊滋,可以調(diào)整整個公式的輸出。只要機器確定了 w 和 b 的值队秩,它就能計算出給定 x 對應(yīng)的 y
丹尼爾:這個公式看上去有點簡單
蛋先生:嗯笑旺,這個公式是可換的。比如在傳統(tǒng)機器學(xué)習(xí)中馍资,我們可以換成有多個 x 特征的線性公式筒主,比如 y = w1x1 + w2x2 + b;或者換成非線性公式鸟蟹,比如 y = wx^2 + b乌妙;甚至還可以換成深度學(xué)習(xí)的神經(jīng)網(wǎng)絡(luò)
丹尼爾:神經(jīng)網(wǎng)絡(luò)?
蛋先生:神經(jīng)網(wǎng)絡(luò)戏锹,可以簡單將它看成由很多個只進行最簡單的一元線性方程的節(jié)點組合而成冠胯,然后再通過激活函數(shù)來實現(xiàn)非線性效果。這個屬于深度學(xué)習(xí)的話題锦针,咱們以后再聊吧荠察!
丹尼爾:好滴,簡單講就是機器學(xué)習(xí)最終學(xué)習(xí)了權(quán)重參數(shù)和偏置參數(shù)
蛋先生:沒錯
機器學(xué)習(xí)是怎么學(xué)習(xí)的奈搜?
? 收集數(shù)據(jù)
丹尼爾:那機器是怎么學(xué)習(xí)到這些參數(shù)的悉盆?
蛋先生:首先,我們需要收集訓(xùn)練數(shù)據(jù)馋吗,而且這些數(shù)據(jù)得是高質(zhì)量的
丹尼爾:這個容易理解焕盟,就像俗話說的,近朱者赤宏粤,近墨者黑嘛脚翘。數(shù)據(jù)質(zhì)量越高,機器學(xué)習(xí)的效果自然也會越好绍哎。那怎么保證數(shù)據(jù)質(zhì)量高呢来农?
蛋先生:這就涉及到數(shù)據(jù)清洗、特征工程崇堰、數(shù)據(jù)增強等數(shù)據(jù)預(yù)處理操作沃于。這些內(nèi)容可是一個大工程,這一時半會也說不完
丹尼爾:好的海诲,我明白了繁莹。暫時我只需要知道需要收集數(shù)據(jù),并且有數(shù)據(jù)預(yù)處理的環(huán)節(jié)就夠了
蛋先生:明白人
? 劃分?jǐn)?shù)據(jù)
丹尼爾:那接下來呢特幔?
蛋先生:接下來我們需要把數(shù)據(jù)劃分成訓(xùn)練集咨演、測試集和驗證集
丹尼爾:為什么要這么做呢?
蛋先生:這樣做是為了提高模型的泛化能力蚯斯,避免過擬合
丹尼爾:慢著雪标,什么是過擬合零院?
蛋先生:想象一下,你平時一直在做同一套習(xí)題村刨。如果考試恰好出了你練習(xí)過的那些題目,當(dāng)然能考高分撰茎。但如果考試出了你從沒見過的題目嵌牺,你就會不知所措。這就是過擬合龄糊,模型只能處理它見過的訓(xùn)練數(shù)據(jù)逆粹,對于新數(shù)據(jù)表現(xiàn)不好
丹尼爾:那什么是泛化呢?
蛋先生:泛化是指雖然考試出了你沒做過的題目炫惩,但你仍然能利用平時練習(xí)時學(xué)到的知識僻弹,舉一反三,依然能夠取得好成績他嚷。泛化能力強的模型能夠處理沒見過的新數(shù)據(jù)
丹尼爾:那訓(xùn)練集蹋绽、測試集和驗證集各自有什么具體作用呢?
蛋先生:別急筋蓖,這個我們等會聊卸耘!
? 選擇模型(算法)
丹尼爾:好吧,那接下來我們干什么呢粘咖?
蛋先生:接下來就是選擇模型蚣抗。你可以選擇簡單的線性回歸模型,也可以選擇復(fù)雜的神經(jīng)網(wǎng)絡(luò)
丹尼爾:怎么選擇模型呢瓮下?
蛋先生:這要根據(jù)你要解決的問題來選擇翰铡。不過今天我們主要聊訓(xùn)練的流程,這個問題就不深入探討了讽坏。但有一點需要提一下锭魔,模型也屬于超參數(shù)。訓(xùn)練時震缭,你可能需要對模型進行調(diào)整赂毯。比如在傳統(tǒng)機器學(xué)習(xí)中使用不同的公式,或者在深度學(xué)習(xí)中增加隱藏層等
丹尼爾:超參數(shù)是什么拣宰?
蛋先生:超參數(shù)不是機器要學(xué)習(xí)的參數(shù)党涕,而是外部提供的參數(shù),可以是人為設(shè)置巡社,也可以通過算法自動調(diào)節(jié)
丹尼爾:聽你這么一說膛堤,我的問題更多了。不過今天我只需要知道晌该,在訓(xùn)練過程中需要根據(jù)實際情況對模型進行調(diào)整就好了
蛋先生:明白人
? 勇敢嘗試
丹尼爾:感覺萬事俱備肥荔,是不是可以開始學(xué)習(xí)了绿渣?機器是怎么找到合適的 w 和 b 的值呢?
蛋先生:一開始燕耿,誰也不知道合適的參數(shù)是什么(如果知道就不用折騰了)中符,所以我們會先隨機給出參數(shù)值,勇敢地邁出第一步
丹尼爾:也就是說誉帅,機器可以隨便假設(shè) w 和 b 為一個值淀散,比如 0 或者其它隨機的值?(初始值的選擇其實是有講究的蚜锨,這個以后有緣再說)
蛋先生:沒錯档插!一開始就是這么做的。因為不知道正確答案亚再,所以先大膽假設(shè)一個值
丹尼爾:那之后呢郭膛?
蛋先生:之后就像你走路發(fā)現(xiàn)方向不對會調(diào)整一樣氛悬,機器也會根據(jù)情況調(diào)整參數(shù)
丹尼爾:首先,機器怎么知道參數(shù)不對勁呢圆雁?
蛋先生:機器使用假設(shè)的參數(shù),計算出對應(yīng)的 y`伪朽,也就是預(yù)測值
丹尼爾:恩
蛋先生:然后它會把預(yù)測值和真實值進行比較。如果預(yù)測值和真實值越接近烈涮,說明 w 和 b 的值越準(zhǔn)確。預(yù)測值和真實值之間的差距就是誤差坚洽,或稱為損失。所以機器學(xué)習(xí)的目標(biāo)就是要盡量減少損失讶舰,損失越小,預(yù)測值和真實值就越接近
? 計算誤差
丹尼爾:計算誤差就只是簡單相減一下嗎跳昼?
蛋先生:有專門的損失函數(shù)來解決這個問題,比如 MAE(平均絕對誤差)和 MSE(均方誤差)
丹尼爾:等等鹅颊,別一下子講這么多專業(yè)名詞
蛋先生:其實很好理解。我們這里的損失值不就是預(yù)測答案與正確答案的差嗎堪伍?當(dāng)然觅闽,差有正有負涮俄,所以通常要取正值蛉拙。取正值有兩種簡單的方法,一種是取絕對值禽拔,一種是取平方
丹尼爾:您接著說
蛋先生:我們的訓(xùn)練數(shù)據(jù)一般是有很多個的刘离。每個數(shù)據(jù)都會有一個損失值,所以總損失值需要包含所有樣本的損失值睹栖。計算總損失值有兩種方法,一種是求和茧痕,一種是求平均野来。結(jié)合絕對值計算和平方計算,求和計算和求平均計算的所有組合踪旷,就得到了四種常見的損失函數(shù):L1曼氛、L2、MAE 和 MSE
L1:絕對值計算 + 求和計算
L2:平方計算計算 + 求和計算
MAE:絕對值計算 + 求平均計算
MSE:平方計算計算 + 求平均計算
丹尼爾:哦令野,這么一解釋舀患,感覺清楚多了。那么該選擇哪種損失函數(shù)呢气破?
蛋先生:建議優(yōu)先使用 MAE 和 MSE聊浅,因為它們不受樣本數(shù)量的影響。然后選擇哪一個還取決于你對極端損失值的處理態(tài)度:是要嚴(yán)懲(MSE)還是忽略(MAE)
丹尼爾:哦现使,原來如此低匙。那么只有這些損失函數(shù)嗎?
蛋先生:當(dāng)然不止這些碳锈。對于回歸問題(可以簡單理解為填空題)顽冶,MSE 和 MAE 都是合適的。而對于分類問題(可以簡單理解為選擇題)售碳,有更合適的損失函數(shù)强重,可以避免在計算中使用大量內(nèi)存來滿足精度需求,比如交叉熵損失函數(shù)等
? 反復(fù)調(diào)整
丹尼爾:好吧贸人,我們已經(jīng)知道了當(dāng)前的損失值间景,接下來要怎么調(diào)整 w 和 b 才能讓損失值變小呢?
蛋先生:這時候就得靠梯度下降這個“指南針”啦灸姊!它會為機器指明 w 和 b 調(diào)整的大小和方向
丹尼爾:咦拱燃,這么神奇,那它是怎么做到的力惯?
蛋先生:額碗誉,這么快就忘記了召嘶?回憶一下我們之前談過的《梯度下降,原來如此哮缺?》吧
丹尼爾:哦哦弄跌,瞧我這個記性铛只,記起來了淳玩。然后就是不斷地反復(fù)操作非竿,對吧红柱?
蛋先生:對呀,就是這么反復(fù)嘗試韧骗。一直調(diào)整袍暴,直到損失函數(shù)的值基本不再變小容诬,這就算完成啦
? 小批量處理
丹尼爾:哦沿腰,這個過程中還有哪些細節(jié)要講的嗎颂龙?
蛋先生:在訓(xùn)練過程中,有一個重要的細節(jié)躲叼。如果我們每次迭代都處理所有的訓(xùn)練數(shù)據(jù)再更新參數(shù)枫慷,對于大規(guī)模數(shù)據(jù)集來說或听,會非常慢。所以顿颅,我們通常采用小批量處理的方式
丹尼爾:小批量處理粱腻?那是怎么一回事绍些?
蛋先生:簡單來說耀鸦,就是每次迭代只處理一小部分訓(xùn)練數(shù)據(jù)揭糕,這部分樣本數(shù)據(jù)可以看作是全部數(shù)據(jù)的代表著角。處理完這一批后吏口,我們就更新模型的參數(shù)
丹尼爾:那這樣處理完所有數(shù)據(jù)需要多少次迭代呢产徊?
蛋先生:這取決于你每次批處理設(shè)置的樣本數(shù)蜀细。比如奠衔,假設(shè)有 10000 個訓(xùn)練數(shù)據(jù),如果每次批處理 1000 個痊夭,那么 10 次迭代就能處理完所有數(shù)據(jù)她我。當(dāng)所有訓(xùn)練數(shù)據(jù)都被處理過一次番舆,我們稱之為一個 epoch。每個 epoch 結(jié)束后击敌,我們可以用驗證數(shù)據(jù)檢驗?zāi)P偷男阅芪纸铮纯此欠裼兴嵘?/p>
丹尼爾:原來如此衡瓶!這樣既節(jié)省了時間牲证,又能有效地評估模型性能坦袍。絕了
蛋先生:訓(xùn)練數(shù)據(jù)、驗證數(shù)據(jù)和測試數(shù)據(jù)的作用在聊到【劃分?jǐn)?shù)據(jù)】時并未提到蛮放,但剛剛已略作闡述包颁。訓(xùn)練數(shù)據(jù)主要用于更新模型參數(shù)娩嚼;驗證數(shù)據(jù)則在每個 epoch 結(jié)束時用來評估模型的性能滴肿,盡管它不參與模型參數(shù)的更新嘴高,但可用于調(diào)整超參數(shù)。最后是測試數(shù)據(jù)春瞬,在模型訓(xùn)練完成后宽气,用于評估模型在實際應(yīng)用中的表現(xiàn),這是對模型能力的最終檢驗绪氛,以確保其在未見過的數(shù)據(jù)上仍能保持良好的性能
丹尼爾:哦枣察,差點忘記這事了
蛋先生:那暫時就沒有什么要補充的了
丹尼爾:已經(jīng)夠多了燃逻,我得好好消化一下
蛋先生:那就此別過
丹尼爾:拜拜??
寫在最后
學(xué)習(xí)知識推薦采用自頂向下的方法伯襟,從大處著眼再到小處姆怪。本故事介紹了機器學(xué)習(xí)訓(xùn)練過程的一個大致輪廓,很多細節(jié)并沒有展開俺附,有緣再聊昙读!
親們,都到這了唠叛,要不,點贊或收藏或關(guān)注支持下我唄 o( ̄▽ ̄)d