江寒來服務員,和自己一起,把老江架了起來。
很快來到預定的套房裡。
江寒將老江扔到大床上,又拉過一條薄被,給他蓋上了。
隨後,他就坐在沙發上,打開手機,給夏雨菲發了條微信。
「我這邊已經搞定了,你那邊呢?」
過了一會兒,夏雨菲回復:「差不多了,我剛把媽媽哄睡……咱們換下報?」
江寒呵呵一笑:「那必須啊。」
夏雨菲馬上給江寒撥了個語音通話。
兩人將打聽到的線索,往一起一拼合,事的來龍去脈,就更加清楚了。
可惜仍然不知道,當年那個第三者到底是誰……
「接下來怎麼辦?」夏雨菲問。
江寒沉了一下:「咱們倆該幹嘛幹嘛,至於你媽媽,還有我家老江……他們倆的事,讓他們自己去理。」
夏雨菲遲疑著問:「這樣真的好嗎?」
俗話說,關心則。
現在的狀態,說好聽點,患得患失;說的直接點……
江寒呵呵一笑:「不然呢?」
這種事,過分干預的話,往往適得其反。
所以,直接手是不可能的,頂多推波助瀾……
夏雨菲遲疑了半晌:「好吧,我聽你的。」
……
又聊了一會兒后。
「那個……」夏雨菲言又止。
江寒問:「怎麼了?」
夏雨菲一咬牙:「如果你將來……如果你將來,喜歡上了別的孩子,或者做出了對不起我的事,我也一定會學媽媽,轉就走!」
江寒「嗯」了一聲,平靜地說:「我記住了。」
夏雨菲沉默了一會兒,語氣轉:「不過我也一定,一定會給你一個機會,跟我解釋清楚。」
如果通過解釋,消弭了誤解,那自然啥事也沒有。
如果他的解釋,實在無法讓人滿意,那就……
那就再給他一個機會,重新解釋唄。
當真決絕地離開?
只怕自己還真有點辦不到!
當然,這個就不用告訴他了,自己心裡有數就行……
江寒點了點頭,說:「這樣很好。」
兩人又聊了一會兒。
見時間已經不早,江寒就和夏雨菲互道晚安。
然後隨便洗了洗,在老江隔壁,將就著躺了下來。
臨睡前,江寒又打開手機,隨意瀏覽了一會兒。
他主要關注的,是機學習方面的最新進展,和一些行業上的消息。
可惜心裡有點不凈,總是想到老江、夏如虹的事……
大約二十分鐘后,江寒忽然看到了一則消息。
ISLVRC2013已經開始接報名,並開放了數據下載埠。
江寒不由得神一振,總算等到了!
ISLVRC,全稱ImageNetLargeScaleVisualRecognitionChallenge,中文名稱「大規模視覺識別挑戰」。
但其實,就是個圖片分類比賽……
ISLVRC使用了ImageNet的一個子集。
ImageNet是一個相當龐大的圖像識別資料庫,由斯坦福大學模擬人類的識別系統建立。
有超過1400萬的圖像,以及相應的標籤,共包含2萬多個類別,一個典型的類別中,往往包含數百個圖像。
這次的比賽中,ImageNet提供的訓練集,共包括12萬多張圖片,以及對應的標籤。
驗證集則是50000張圖片和標籤。
至於最終挑戰的測試集,則包含了10萬條數據,分屬於1000個不同的類別。
這麼大規模的數據集,製作起來本高昂得驚人,全世界也沒有幾個。
對於研究機學習的人來說,這個比賽可是不容錯過的。
江寒馬上就報了名,並利用會館的WIFI,開始下載數據集。
只是,手頭並沒有電腦,怎麼進行編程呢?
江寒沉了一下,馬上進了虛擬空間。
這裡可是有一臺隨時可以使用的286。
雖然型號特別原始,能落後了點,也不能調試、編譯神經網路。
不過,自己完全可以用文本的方式,先把代碼敲進去,保存好。
明天再找個時間,發送到真實電腦上,調試、修改、編譯,然後上傳到伺服上訓練……
此外,這樣做還有一個莫大的好,那就是可以節省大量的時間。
畢竟在這裡工作100個小時,外面只過去大約1個小時……
江寒思考了一會兒,很快就有了大概的思路。
首先,既然是圖像識別,那麼最適合的模型,自然是卷積神經網路CNN了。
以CNN為基礎,打造一個深度學習網路,再進行一番優化,結合一些小技巧,大概率能取得極其優秀的果。
江寒設想了一個多達十幾層的卷積神經網路。
首先是輸層。
輸的圖像數據,是n×n×3的RGB彩圖像,所以這一層的數據格式,可以定義為一個三維數組。
接下來是卷積層。
對於卷積神經網路來說,這自然是重中之重。
江寒花費了很大的心,終於設計出一個全新的結構。
通過反覆地卷積、池化和標準化,一步步提取圖像的特徵……
經過前面這些步驟,需要理的神經元個數,和輸層相比,已經減了很多。
接下來,就可以把數據送進全連接層,用softmax函數進行分類了。
最後還要有個輸出層,對應1000種分類標籤……
確定了大思路之後,江寒又設計了一下網路的結構。
比如,應該有幾層卷積層,每一層如何實現……
一般的神經網路里,激活函數主要使用Sigmoid和Tanh(雙曲正切)函數。
但這兩個函數……
在網路層次較淺時,問題可能還不是很大,網路層次一深,就容易梯度炸或者梯度消失。
江寒在研製OCR的時候,就發現了這個問題,所以這一次,他準備引ReLU,作為卷積層的激活函數。
ReLU(RectifiedLinearUnit),一般稱作「線整流函數」,也可以翻譯「修正線單元」。
這個函數其實很簡單,表達式為F(x)=max(0,x)。
當自變數大於0時,它就是一個線函數,相當於一次函數y=x;
當自變數≤0時,y≡0。
這個函數其實不是什麼新鮮東西,只是在機學習中,以前沒人用過罷了。
所以這也算是一點小小的創舉……
要說ReLU的好嘛,那自然是不的了。
一方面,可以有效緩解梯度消失、梯度炸。
並且,還能讓梯度下降得更快,有效地提高訓練效率。
另一方面,也比較符合仿生學原理。
生神經細胞的工作模式,就和這個函數差不多……
江寒思考了一下,又在網路的最後幾個全連接層中,使用了Dropout方法。
所謂Dropout,就是在前向傳導時,以某個概率P,隨機忽略部分神經元。
這樣做,可以有效地避免過擬合。
在編寫池化層時,江寒考慮了一下,使用了重疊的最大池化方法,而沒有使用他此前在CNN論文中提到的平均池化。
因為後者有個副作用,容易導致模糊化。
同時,這樣做還有另外一些好。
比如,由於有部分重疊和覆蓋,提取出來的特徵,往往也會更加富……
在編寫標準化層的時候,江寒考慮再三,運用了LRN機制,也就是局部響應歸一化。
這樣做的目的,是讓局部神經元的活,產生某種競爭機制,使得強者愈強、弱者愈弱。
歸結底,是為了提高模型的泛化能力。
為了儘可能加快訓練速度,江寒甚至考慮過使用GPU編程。
雖然這個世界的GPU廠商,還沒有發明CUDA技,但條件已經完全備了。
畢竟從理論上來說,能挖礦的顯卡,就能用於大數據計算。
只要編寫出合適的驅和代碼,就能利用GPU,來進行大規模并行運算,顯著地提高神經網路的訓練速度。
可惜的是,單個顯卡的顯存比較有限,也就是說,可能承載不了太大的人工神經網路。
而這個深度CNN網路……
即使最保守的估計,也需要4~5GB的顯存。
這樣一來,就必須用兩塊顯卡,下火才行了……
江寒在虛擬空間中忙碌了幾十個小時,終於把這個空前巨大的人工神經網路搭建了起來。
當然,今天是沒法開始訓練了,只能等到明天再說……
江寒想了想,又買了很多空白圖紙,以及一些中筆,開始草擬論文的初稿。
在這次的比賽中,沒啥意外的話,自己這個「深度卷積神經網路」,應該能拿到不錯的績。
到時候,萬一有需要的話,現寫論文就顯得有點不夠從容了。
所以江寒決定,今晚就把這個網路的框架,寫論文,保存起來。
等到訓練完,收集到足夠的數據,再稍微修改下,就可以找個合適的時機,投出去了……。