第53章 顯卡根本不是用來玩遊戲的!
老闆說:「這卡算是卡皇級別的,這玩意打遊戲效果非常好,你拿回去試試,如果不喜歡,拆下來退給我也行。」
蘇舟看著配置單上的數字,心裡默默地算了一筆帳。
整套下來五千一百塊,減去舊機回收和三百塊優惠,實際付四千二百二十塊,手裡還能剩一千八百一十塊。
「成交。」蘇舟爽快地說。
老闆幹活很利索,拆包、裝機、走線、理線、裝系統、導舊電腦數據,一氣呵成。
蘇舟就站在旁邊看著,偶爾遞個螺絲刀,兩人有一搭沒一搭地聊著。
裝好之後點亮測試,BIOS界面跳出來的那一刻,蘇舟的眼睛亮了。
到家的時候已經是下午兩點。
蘇舟把新主機連上顯示器和鍵盤,按下電源鍵,風扇轉起來的聲音都不一樣了,舊電腦開機像拖拉機啟動,這台聽著根本沒什麼聲音。
心情大好的蘇舟裝完開發環境後,閉上眼睛,在腦海中把整個神經網絡的架構從頭到尾過了一遍。
羅森布拉特給的紅包在這一刻發揮了最大的作用。
蘇舟腦子裡面出現了一個從輸入到輸出的完整信息流動過程,每一層感知器接收信號,處理信號,傳遞信號,都像人類大腦中神經元的層層遞進。
他打開編輯器,開始寫代碼搭建最基礎的感知器模型。
這是羅森布拉特當年的起點,也是一切神經網絡的根基。
一個感知器本質上就是一個函數,接收多個輸入,乘以各自的權重,求和,再通過一個激活函數決定是否激發。
就像人腦中的一個神經元,電信號進來,強度夠了就放電,不夠就沉默。
蘇舟用休學期間學到的C語言寫了一個最簡單的感知器,輸入是兩個數,輸出是0或1。
跑了一下,能用,但毫無意義,一個感知器連複雜一點的運算都解決不了。
現在他需要把感知器疊起來。
單個神經元什麼也幹不了,但幾十億個神經元連在一起就成了人腦。
同理,單個感知器沒用,但把成百上千個感知器排成層,層與層之間全連接,信息從輸入層流向隱藏層再流向輸出層,這就是多層感知器,也就是最基本的神經網絡。
這個過程需要大量的矩陣運算。
每一層的輸出都是上一層輸出乘以權重矩陣再加偏置,然後過激活函數。
蘇舟在紙上推了一遍矩陣,確認沒問題後,開始編碼。
萊布尼茨的萬象歸析技能在這裡幫了大忙。
矩陣運算的本質是線性變換,線性變換的本質是空間映射。
蘇舟不需要死記硬背公式,他能憑直覺想像數據的處理過程。
網絡搭好了,但權重是隨機初始化的,輸出全是垃圾。
怎麼讓網絡學習呢?
答案是反向傳播算法,先算輸出和正確答案之間的誤差,然後把這個誤差從輸出層往回傳,逐層計算每個權重對誤差的貢獻,最後按貢獻大小調整權重。
這裡就是微積分大展身手的地方了。
反向傳播的核心是鏈式求導,也就是一層套一層的偏導數。
這東西寫在教科書上能讓研究生抓頭髮抓禿,但在蘇舟眼裡,鏈式法則就像一條河流倒著流,水從下游往上游涌,每經過一個分叉口就按比例分流,最終每一滴水都能追溯到它對水位漲落的貢獻。
三重技能疊加之下,代碼寫得異常順利。
到晚上八點,蘇舟已經搭好了一個三層全連接神經網絡,輸入層784個節點,對應28×28像素的手寫數字圖片,隱藏層128個節點,輸出層10個節點,對應0到9十個數字。
他從網上下載了手寫數字數據集,六萬張訓練圖片,一萬張測試圖片,灌進去,按下回車。
屏幕上的數字開始滾動。
蘇舟靠在椅背上,看了一眼右下角的進度條和計時器,開始心算。
六萬張圖片,每張圖片經過前向傳播和反向傳播需要多少次浮點運算。
三層網絡,784×128再加128×10,每層還有激活函數和梯度計算……
算完之後,蘇舟的臉色有點不好看。
按照現在這個速度,跑完他預設的訓練計劃,包括調參、增加網絡深度、切換更大的數據集,保守估計,至少要兩個月。
兩個月才知道結果也太久了點吧!
得想想辦法才行。
他切出終端,打開瀏覽器,一頭扎進了各大技術論壇。
滿屏都是硬體發燒友們在激烈對線。有人在吹噓最新的CPU架構,有人在討論怎麼給雙核處理器加壓超頻,把主頻拉高個零點幾GHz以榨乾最後一絲性能。
看了一圈,蘇舟搖了搖頭。
就算把這顆CPU超頻超到冒煙,撐死也就提升個20%的性能,兩個月變成一個半月,有什麼本質區別嗎?
他盯著網頁上一張CPU的核心架構圖,腦子裡突然想到,方向錯了!
大家都在死磕CPU,但CPU這玩意兒,天生就不適合跑神經網絡!
CPU就像一個頂級數學教授。
微積分、概率論、拓撲學,什麼高精尖的題都會做,來者不拒。
但它的問題在於分身乏術,核心太少,通常就兩到四個。
這就好比教授雖然牛逼,但一次只能拉兩三個學生進辦公室輔導。
它那龐大而複雜的控制單元,全是為了處理各種神出鬼沒的邏輯分支和指令跳轉而生的。
而神經網絡的訓練是個什麼流程?
海量的矩陣乘法、向量加法、逐元素激活。沒有複雜的邏輯判斷,沒有七拐八彎的條件分支,全是枯燥、重複、極其暴力的純粹數值計算。
讓頂級數學教授去批改幾十萬道小學三年級的口算題?
這不是為難它嗎?
「需要批改小學算術題,那就該找小學老師啊……」蘇舟喃喃自語,目光不自覺地移向了桌子底下的機箱,眼睛越來越亮。
顯卡!GPU!
GPU是什麼?
如果CPU是一個教授,那GPU就是一個由幾百個小學數學老師組成的斯巴達軍團!
每個小學老師只會做最簡單的加減乘除,但架不住人多啊!
以現在市面上高端一點的NVIDIA 8800 GTS顯卡為例,裡面足足塞了128個流處理器!
它們可以同時並行工作!
雖然單挑的話,一個流處理器的運算能力連CPU核心的腳趾頭都摸不到。
但如果現在的任務是「立刻把這一百萬道加減乘除題算完」呢?
128個小學老師同時髮捲子,並排批改,火力全開。那種粗暴的並行計算速度,絕對能把孤軍奮戰的教授碾壓得連渣都不剩!
大規模、高度並行的純粹數值計算,這特麼不就是給GPU量身定做的活兒嗎?!
蘇舟直起身子,心跳陡然加速。
他意識到一個重要問題。
顯卡根本不是用來玩遊戲的!
ps.五一假期了,求追讀求月票,給小作者一點動力吧!大家的評論我都有看,會及時做出調整~
蘇舟看著配置單上的數字,心裡默默地算了一筆帳。
整套下來五千一百塊,減去舊機回收和三百塊優惠,實際付四千二百二十塊,手裡還能剩一千八百一十塊。
「成交。」蘇舟爽快地說。
老闆幹活很利索,拆包、裝機、走線、理線、裝系統、導舊電腦數據,一氣呵成。
蘇舟就站在旁邊看著,偶爾遞個螺絲刀,兩人有一搭沒一搭地聊著。
裝好之後點亮測試,BIOS界面跳出來的那一刻,蘇舟的眼睛亮了。
到家的時候已經是下午兩點。
蘇舟把新主機連上顯示器和鍵盤,按下電源鍵,風扇轉起來的聲音都不一樣了,舊電腦開機像拖拉機啟動,這台聽著根本沒什麼聲音。
心情大好的蘇舟裝完開發環境後,閉上眼睛,在腦海中把整個神經網絡的架構從頭到尾過了一遍。
羅森布拉特給的紅包在這一刻發揮了最大的作用。
蘇舟腦子裡面出現了一個從輸入到輸出的完整信息流動過程,每一層感知器接收信號,處理信號,傳遞信號,都像人類大腦中神經元的層層遞進。
他打開編輯器,開始寫代碼搭建最基礎的感知器模型。
這是羅森布拉特當年的起點,也是一切神經網絡的根基。
一個感知器本質上就是一個函數,接收多個輸入,乘以各自的權重,求和,再通過一個激活函數決定是否激發。
就像人腦中的一個神經元,電信號進來,強度夠了就放電,不夠就沉默。
蘇舟用休學期間學到的C語言寫了一個最簡單的感知器,輸入是兩個數,輸出是0或1。
跑了一下,能用,但毫無意義,一個感知器連複雜一點的運算都解決不了。
現在他需要把感知器疊起來。
單個神經元什麼也幹不了,但幾十億個神經元連在一起就成了人腦。
同理,單個感知器沒用,但把成百上千個感知器排成層,層與層之間全連接,信息從輸入層流向隱藏層再流向輸出層,這就是多層感知器,也就是最基本的神經網絡。
這個過程需要大量的矩陣運算。
每一層的輸出都是上一層輸出乘以權重矩陣再加偏置,然後過激活函數。
蘇舟在紙上推了一遍矩陣,確認沒問題後,開始編碼。
萊布尼茨的萬象歸析技能在這裡幫了大忙。
矩陣運算的本質是線性變換,線性變換的本質是空間映射。
蘇舟不需要死記硬背公式,他能憑直覺想像數據的處理過程。
網絡搭好了,但權重是隨機初始化的,輸出全是垃圾。
怎麼讓網絡學習呢?
答案是反向傳播算法,先算輸出和正確答案之間的誤差,然後把這個誤差從輸出層往回傳,逐層計算每個權重對誤差的貢獻,最後按貢獻大小調整權重。
這裡就是微積分大展身手的地方了。
反向傳播的核心是鏈式求導,也就是一層套一層的偏導數。
這東西寫在教科書上能讓研究生抓頭髮抓禿,但在蘇舟眼裡,鏈式法則就像一條河流倒著流,水從下游往上游涌,每經過一個分叉口就按比例分流,最終每一滴水都能追溯到它對水位漲落的貢獻。
三重技能疊加之下,代碼寫得異常順利。
到晚上八點,蘇舟已經搭好了一個三層全連接神經網絡,輸入層784個節點,對應28×28像素的手寫數字圖片,隱藏層128個節點,輸出層10個節點,對應0到9十個數字。
他從網上下載了手寫數字數據集,六萬張訓練圖片,一萬張測試圖片,灌進去,按下回車。
屏幕上的數字開始滾動。
蘇舟靠在椅背上,看了一眼右下角的進度條和計時器,開始心算。
六萬張圖片,每張圖片經過前向傳播和反向傳播需要多少次浮點運算。
三層網絡,784×128再加128×10,每層還有激活函數和梯度計算……
算完之後,蘇舟的臉色有點不好看。
按照現在這個速度,跑完他預設的訓練計劃,包括調參、增加網絡深度、切換更大的數據集,保守估計,至少要兩個月。
兩個月才知道結果也太久了點吧!
得想想辦法才行。
他切出終端,打開瀏覽器,一頭扎進了各大技術論壇。
滿屏都是硬體發燒友們在激烈對線。有人在吹噓最新的CPU架構,有人在討論怎麼給雙核處理器加壓超頻,把主頻拉高個零點幾GHz以榨乾最後一絲性能。
看了一圈,蘇舟搖了搖頭。
就算把這顆CPU超頻超到冒煙,撐死也就提升個20%的性能,兩個月變成一個半月,有什麼本質區別嗎?
他盯著網頁上一張CPU的核心架構圖,腦子裡突然想到,方向錯了!
大家都在死磕CPU,但CPU這玩意兒,天生就不適合跑神經網絡!
CPU就像一個頂級數學教授。
微積分、概率論、拓撲學,什麼高精尖的題都會做,來者不拒。
但它的問題在於分身乏術,核心太少,通常就兩到四個。
這就好比教授雖然牛逼,但一次只能拉兩三個學生進辦公室輔導。
它那龐大而複雜的控制單元,全是為了處理各種神出鬼沒的邏輯分支和指令跳轉而生的。
而神經網絡的訓練是個什麼流程?
海量的矩陣乘法、向量加法、逐元素激活。沒有複雜的邏輯判斷,沒有七拐八彎的條件分支,全是枯燥、重複、極其暴力的純粹數值計算。
讓頂級數學教授去批改幾十萬道小學三年級的口算題?
這不是為難它嗎?
「需要批改小學算術題,那就該找小學老師啊……」蘇舟喃喃自語,目光不自覺地移向了桌子底下的機箱,眼睛越來越亮。
顯卡!GPU!
GPU是什麼?
如果CPU是一個教授,那GPU就是一個由幾百個小學數學老師組成的斯巴達軍團!
每個小學老師只會做最簡單的加減乘除,但架不住人多啊!
以現在市面上高端一點的NVIDIA 8800 GTS顯卡為例,裡面足足塞了128個流處理器!
它們可以同時並行工作!
雖然單挑的話,一個流處理器的運算能力連CPU核心的腳趾頭都摸不到。
但如果現在的任務是「立刻把這一百萬道加減乘除題算完」呢?
128個小學老師同時髮捲子,並排批改,火力全開。那種粗暴的並行計算速度,絕對能把孤軍奮戰的教授碾壓得連渣都不剩!
大規模、高度並行的純粹數值計算,這特麼不就是給GPU量身定做的活兒嗎?!
蘇舟直起身子,心跳陡然加速。
他意識到一個重要問題。
顯卡根本不是用來玩遊戲的!
ps.五一假期了,求追讀求月票,給小作者一點動力吧!大家的評論我都有看,會及時做出調整~