問答環節
問:在finetuning的時候,新問題的圖像大小不同于pretraining的圖像大小,隻能縮放到同樣的大小嗎?”
答:對的:)
問:目前dl在時序序列分析中的進展如何?研究思路如何,能簡單描述一下麼
答:這個有點長,可以看看google最近的一系列machine translation和image description的工作。
問:2個問題:1.目前Caffe主要面對CV或圖像的任務,是否會考慮其它任務,比如NLP?2.如果想學習Caffe代碼的話,能給一些建議嗎?
答:Caffe的确主要是做vision的,但是也可以做nlp,caffe的代碼學習我覺得主要還是follow tutorial,另外知乎上我記得有一位兄台做過一些解析,但是不是很記得link了...
問:"請問下師兄,在移動端用深度學習可以實作實時人臉檢測麼?謝謝"
答:人臉檢測可能目前用傳統方法還是很competitive的,但是做一些識别等等,我覺得目前的移動裝置應該是可以支援的。
問“1、fine tuning過程是用已有的模型來初始化現有的模型,那在fine tuning的過程中,怎麼在fine tuning的時候,不更新某些層的參數呢?”
答:這個在caffe裡面可以設定一些layer的learning rate為零來實作:)
問:“我一直想問的問題 就是slide1上的黃嘌呤是什麼意思 ,現在的卷積能實作化合物feature的識别嗎?”
答:那個其實是咖啡因(caffeine)的分子式

問:“請問 訓練過程中batch的大小對結果影響大嗎?受限于我的gpu記憶體,我的batchsize不能選太大,我懷疑這個會導緻結果的不收斂”
答:理論上batch小是不會影響收斂的。小batch主要的問題是在FC層的計算可能會不是很efficient,但是數學上沒有問題。
問:“ 現在在caffe裡實作的imagnet那個 caffenet,是不是 2-GPU的嗎?”
答:是單GPU的,其實AlexNet可以直接用單GPU來實作,大家覺得AlexNet是2GPU的緣故是,Alex當年train網絡的時候GPU記憶體太小,他隻好用兩個GPU來實作:)後來大家一般都是用一個GPU的。
問:"師兄您好,想用caffe做下反卷積,發現裡面有自帶deconv層代碼,但是不大會使用,官網也沒有相關資料"
答:這個的确有點tricky。。。我個人沒用過deconv層,是以不是很好解釋,你可以在[email protected]上問問:)
問:“用caffe訓練自己的資料時,網絡層數、卷積核大小、滑動步長,學習速率這些參數的設定有沒有一個規律可循呢? ”
答:這個相對比較tricky,我覺得更多的還是通過已有的架構然後來做一些微調,個人也沒有太好的insights可以分享:微軟的paper,vgg,googlenet可能有幫助。
問:“目前deep learning用在小資料集上有什麼好的方法嗎?在小資料集的問題上是不是可以通過減少網絡的層數來減少過拟合?”
答:小資料集基本上需要通過小的模型來防止overfit,當然如果資料集是圖像等等,也可以通過finetuning。另外一個可能是直接手标更多資料,有時候糙快猛但是還挺好使的。
“我在自己的資料集上訓練,訓練的loss函數一直不降低,調小過偏置大小,學習率也改過很多,但是每次都很快的疊代到一個大的值,不再變化,而且測試準确率就等于瞎猜的準确率” 這個可能是learning rate太大或者初始值的問題?可以縮小初始值的scale事實
“請問在s層,如何确定該用mean pooling還是max pooling?”
基本上靠試

"目前dl近幾年在siamese nets distances結構上的進展如何?研究思路如何?"
Yann Lecun有paper講這個,值得看看
“師兄您好,我想問下不使用matlab或python接口,直接在C++的caffe代碼裡對圖像進行分類有什麼好的方式嗎,速度會不會比matlab和python更快”
我覺得速度應該差不多,因為matlab和python的overhead不會太大
“dl能實作FFT嗎” facebook其實有fft的code,參見fbfft:)
"2、caffe内部的Convolution計算是圖像拉伸成向量進行的計算,這種方式會比普通的方法和fft的方法計算更快嗎?
放大點說,caffe做了哪些算法上的優化 使得計算速度比較快呢?" 那個其實是我的weekend hack,是以推薦大家用其他的優化,比如說cudnn等等。說實話寫caffe的時候我沒太關注速度....
“師兄,您好!用caffe純粹做分類的話(前向),需要softmax層嗎?看代碼有個pro層和softmax一樣嗎?”
不是很清楚pro層是哪個,不過也可以用logistic,任何傳統的分類函數應該都是可以的
“3、對于cxxnet,您是怎麼看待的呢? ”
我還挺喜歡cxxnet的一些設計的,基本上就是大家選自己喜歡的codebase來用吧:)
關于時序的問題統一回答一下 - 大家可以參考最近的machine translation,im2txt等等的一系列文章
“請問,想cxxnet,這些新的架構,也內建了bn,prelu等新的子產品,caffe是否會内置這些子產品呢>” 我覺得會的,這個在code層面上其實沒有太大的問題。我最近主要在做一些refactor,然後還有一些公司的事情,是以沒有關注在push新的子產品上:)
“caffe能否在多個層都連接配接loss函數,同時進行反向傳播” 可以的,關鍵是要處理好gradient merge的問題,其他都是OK的:)
“caffe裡面的激活函數可以自行修改成其他自己設計的激活函數嗎” 可以的,你可以參考ReLU層的code,然後改一下relu的函數就可以了
“CNN可以應用到對圖像進行深度圖提取嗎?效果會怎樣呢?”最近nyu應該有一篇stereo的文章,應該比較類似?
“caffe會内置rbm的子產品嗎。nin相關的會不會也會考慮添加。” rbm可能不會,因為最近用得好像比較少。nin其實已經支援了 - nin的本質是1x1的convolution,可以參考googlenet
“我現在是在做機器學習,還沒有深入deep learning,是不是要先打好機器學習的基礎再學dp會好一點,謝謝賈老師了” 這個我其實也不是很清楚,很多想法其實都是相通的(比如說優化的問題),是以可以都看一些,然後按照自己的需求深入:)
“用hdf5layer實作多label的過程不是很清楚,舉個例子說,比如,輸入低分辨圖像,label是高分辨圖像,,這種有沒有詳細一點的教程,或者師兄能不能簡單提一下” 這個主要就是要設計一個input層能夠輸出不同的top blob,其實caffe在這一點上做的不是很好(因為太關注classification了),可能看一下這些典型的輸入層的實作會有幫助。
“caffe能支援lstm、rnn的訓練嗎?另外,對于百度的dlmc您有什麼看法?” Jeff Donahue有一個branch可以來做lstm,我自己在refactor的一些code應該也是可以的,但是因為公司review政策的緣故沒法保證什麼時候能release
dmlc我覺得是個挺好的effort,在開源界看到更多中國學生的身影很興奮!
“師兄您好。想問一個問題,如何将已知的世界知識,比如說文法規則等有效融入到深度學習中?” 這個是個好問題,目前大家都有點傾向于learning from scratch,是以我也說不好怎麼做融合,但是應該是一個值得考慮的研究方向
“請問調參方面有什麼比較細緻的資料或文獻集” “solver裡的 lr_policy: 選擇有什麼規律麼 我看到有fixed inv” 這兩個問題,基本上我覺得還是靠經驗。marc'aurelio ranzato曾經有一個presentation講一些有用的trick,容我找找,anyway,不太好找,但是marc'aurelio的網站在這,應該是其中的某一個slides:http://www.cs.toronto.edu/~ranzato/
“用自己的資料(并不屬于imagenet的1000個類)在imagenet訓練的網絡上做finetune時,發現怎麼調整參數最後幾乎都無法用來分類,這是什麼原因呢?” 這個可能需要看一下圖檔是否類似,比如說imagenet的模型用來做醫學圖像識别效果就很可能會不是很好,還是需要看這兩個task的資料之間是否有相似性.
“接着上一輪的提問,caffe實作多層loss反向傳播,我能不能直接在prototxt裡每一層後加一層loss,最後的結果會是怎樣?” 唔,這個得看loss是什麼了,比如說googlenet用到了幾個branch來inject softmax,是以基本上還是要尋找和問題相關的loss term
“可否評論一下nature 新出的DL文章?reinforcement learning之類的會是下一個主要結合的點嗎?” 哈,Hinton本人的說法是“you won't learn much from that paper”。那個更多的是一個overview,如果希望了解一下DL的來龍去脈的話值得讀一下。RL其實還是挺熱門的,deepmind做的就有點像RL,berkeley Pieter Abbeel組也做了很多RL的工作
“,lstm97年就出來了,為何最近又火起來” 我覺得是因為LSTM的确可以很好地model sequence data,為啥會有冷熱的問題,這個很神秘:)誰也說不清楚,你看CNN也是冷了好幾年然後忽然熱了。
“dl能實作FFT嗎” facebook其實有fft的code,參見fbfft:)” fb是利用了FFT去快速計算,不是我問的意思。用傅立葉變換其實是提取了頻域特征,根據應用的不同,最優的變換不一定是FT,可能是時頻變換、分數階FT等等變換。那麼問題就來了:利用深度學習算法,能否學習到最優的時頻特征表出?如果可以,是不是可以把信号處理裡面的固定分析方法都扔掉?” 這個我就的确不是專家了,我覺得這個有點類似于model design的問題,深度學習相當于也是設計了一大類的model,然後在這一類model當中尋找最優的,是以如果有一些oracle knowledge(比如說已有的固定分析的經驗)可以知道如何rectify資料,我覺得應該還是有幫助的
“caffe有沒有對分布式的支援?”目前在parallel branch裡面
“3.caffe的訓練過程如何使用gpu對計算性能進行優化” 這個更多的是在code層面上調速度了,如果有興趣的話,nvidia的nvprof應該會很有幫助
“記得有一篇說論文說 在imagenet上,把30%的标簽打亂,反而使得最後的結果更好和更魯棒。那麼是不是意味着我們不需要強定義的資料(不需要那麼仔細的标注資料) 就可以訓練得到一個不錯的模型呢?” 我覺得基本上就是資料越幹淨,資料越多,效果一般就越好(實際應用上我們有時候會讓human rater去再次确認一些不确定的标注)。魯棒性的問題,我覺得可能是因為增加了regularization?imagenet上基本上還是标準的protocol來training效果最好。
“caffe用的GPU大概成本需要多少” 取決于GPU,我覺得從200到1000美元不等?當然土豪用5000塊錢的K80這種事情也是可以的。
“師兄您好!用SGD的時候,收斂充分的前提下,不同的學習率衰減政策是不是結果都差不多?” 恩,一般會差不多
“dl 在ctr預測上有什麼好的論文或者資料麼?” 我不是很清楚,不過餘凱師兄以前講過百度用DL做CTR效果很好,是以還是很promising的
“不好意思,我的問題可能沒表達清楚,您之前說多層loss反向傳播,需要處理好gradient的merge,我想問,如果隻是在prototxt裡,每一層後加上需要的loss函數,那麼caffe最終的反向傳播會是怎樣進行的” 哦,應該是這樣的,每一層後面需要一個split層,把這一層的輸入變成兩個blob,一個繼續往下傳播,一個輸入到loss層裡面。在backprop的時候,split層會把這兩條路徑的gradient加起來
"其實我對師兄解釋的dl在時序方面的應用還是不太清楚,能多分析一下嗎?" DL在時序方面的應用主要是RNN/LSTM這方面,主要是用來了解sequence的資訊,兩個用法:(1)提取sequence的feature,然後來做classification或者embedding,(2)從sequence到sequence,比如說輸入語音,輸出識别的句子
“1.caffe的訓練過程能否保持對象的旋轉不變性 怎樣做到這點” 目前不是很好explicit地輸入這樣的constraint,主要還是靠data augmentation(輸入各種旋轉以後的圖)來實作
“2.caffe對不同尺度的同一對象的分類和識别有哪些特殊的處理方法” 這個倒也不單是caffe的問題,在圖像識别上如果需要處理不同尺度,一般就是做multi-scale的detection,可以參考一下selective search,R-CNN等等的工作
“用自己的資料集,且類型和和imagenet的類型不太一樣(比如細胞類型),想用caff訓練的話,最少得需要多少資料量,才比較好?” 這個說不太好,是以最好還是先用一部分資料測試一下,然後你可以用從少到多的資料來訓練,然後外推一下可能會需要多少資料
“現在caffe上有一些已經訓練好的,準确率比較高的模型嗎?我在caffe首頁下載下傳的幾個分類的精度都不高,cifar10和imagenet的都是 百分之八十幾,有精度更高的嗎?” 基本上imagenet的模型算是準确度最高的了,包括googlenet和vggnet
“softmax_layer和softmax_loss_layer有什麼差別。” softmax_layer是做softmax變換(就是把輸入的score變成sum to 1的機率值), softmax_loss是計算prediction和true label之間的cross entropy loss function
“Caffe現在怎麼處理變長的圖檔,因為Conv對變長不明感,而且可以用Dynamic Pooling?”變長的圖檔可以用SPPNet這樣的思路,最後做一個固定輸出大小的pooling
“請問多任務學習的DL有什麼經驗可以分享嗎?比如資料分布的均勻性的影響” 資料分布均勻性一般都還是挺tricky的,實際操作上一般我覺得cap一些frequency(如果某一類太多了,就downsample一下)會使得training更好一些
“想問一下:在神經網絡的訓練過程中,如何能夠并行或者說更快地計算?” 主要是靠兩點吧,一個是寫更快的code(比如說用cudnn優化convolution),一個是寫并行計算的架構(這方面我推薦用MPI入手,因為MPI雖然沒有fault tolerance等等的好處,但是并行非常簡單,可以作為最開始的測試)
“autoencoder 模型中,單個隐含層和多隐層 模型,效果差别很多啊嗎?” 這個可能和具體實作有關,隐層多了以後,representation power增加,很可能會提升效果,但是也可能會overfit,是以需要更仔細的training
“請問除了從分類結果看特征表出的優劣,有沒有一種通行的方式去看特征表出的優劣?還有一個問題:lstm簡直就是一個編碼模型…以後機器學習的結構都要往電子工程上靠了嗎?我覺得結構越來越複雜正背離dl的初衷了…” 其實大家經常批評DL的問題就是說,我們從設計feature變成了設計model(我記得原話是jitendra malik講的...啊我太八卦了)。是以這個的确也是一個難解的問題,興許我們可以做一個算法來自動生成很多model然後evolve這些model?MIT曾經有一篇paper來自動學習網絡的結構,但是目前state of the art的模型還經常靠手調
“DL中,能否預知到底學到了一個怎樣的實體模型,來實作分類的?” 參見上面的回答:)目前比較困難,在圖檔上,大家做過一些有意思的實驗來檢測模型到底學了什麼,可以參考karen simonyan的文章(用CNN來生成一個"最像"某一個類别的圖像)
轉自:http://suanfazu.com/t/caffe/9479