開篇問:從word復制筆記上傳格式老是出問題,求教
1.開始
如何由工程思維轉(zhuǎn)化到算法思維
算法的開發(fā)流程:
開始-觀察-實驗-模型-觀察-更新模型-結(jié)果輸出
具體來說:
1.??明確需求
2.??觀察需求所涉及的問題
“三個重要概念:準確率(Accuracy)、召回率(Recall)、精確率(Precision),例如1000封正常郵件,500封垃圾郵件,100封重要郵件,模型一共找出100封正常郵件、400封垃圾郵件、5封重要郵件
準確率(垃圾郵件)=提取出的正確信息條數(shù)/總樣本數(shù)=400/1600
精確率(垃圾郵件)=提取出的正確信息條數(shù)/提取的信息條數(shù)=400/(400+5+100)
召回率=提取出的正確信息條數(shù)/樣本中的信息條數(shù)=400/500”
是希望召回率高還是精確率高呢,可以做一個Precision-Recall曲線來分析
3.??算法工程實踐
原則:算法為業(yè)務服務,不要為了算法而算法
4.??測試
如何評價一個模型,除了3個主要指標,還有F1-Measure,表示召回率和準確率的調(diào)和均值,F(xiàn)1=2PR/(P+R)
算法研發(fā)的方法論:CRISP-DM、SEMMA
以SEMMA為例:流程圖(省略)
分為數(shù)據(jù)取樣-數(shù)據(jù)特征探索、分析和預處理-問題明確化、數(shù)據(jù)調(diào)整和計算選擇-模型的研發(fā)、知識的發(fā)現(xiàn)-模型和知識的解釋和評價
“需要注意模型衰退的問題,也就是隨著數(shù)據(jù)更新,模型準確率下降。算法要不斷更新“
觀察變化和不變是最重要的
2.文本分析實踐
·??????關于郵件分類問題的復盤
特征提取是第一步
垃圾郵件的標題一般是什么樣的
先用jieba分詞包做斷句,并進行去除非法字符等預處理
然后選用特征提取的算法
我們首先想到的是貝葉斯、SVM、決策樹等,但準確率不高,于是考慮CNN做文本分類,步驟如下:
第一步選取最長的句子作為向量長度,其他句子長度
第二步將訓練集和測試集分開訓練
·??????關于文本情感分類
如何用算法思維解決問題
分析需求,情感傾向可以暫考慮三類:支持、反對、中性。情感分類方法主要兩類:基于情感詞典的方法和基于機器學習的方法,對比兩種方法的優(yōu)劣,發(fā)現(xiàn)綜合判斷是必要的,機器學習的數(shù)據(jù)集要根據(jù)不同行業(yè)確定,這樣可以提高準確率
·??????關于文本深度特征提取
自然語言數(shù)學化是第一步
文本的深度特征表示方法:
詞典法將所需處理的文檔所有詞進行剔重、排序,形成一個詞典,這樣可以用集合表示一句話
One-HOt把每個詞表示成一個向量,向量長度為句子長度,在向量中該詞出現(xiàn)的位置填1,其他位置填0
n-gram組的思想,1gram表示一個單詞,n-gram表示按長度n切分原詞得到的詞段
分布表示和詞嵌入特征表示將所有詞分散在一個平面中,詞的坐標已知,依靠平面位置可以得到詞和詞的關系;
在詞特征表示之后研究句子特征表示
有兩種方法:傳統(tǒng)的VSM方法以及基于神經(jīng)網(wǎng)絡表示法
主要研究神經(jīng)網(wǎng)絡表示
基于RNN的方法是將句子中的詞逐個輸入到模型中,結(jié)束時取隱藏層的輸出即可。
基于CNN的方法是將句子中的詞的向量表示拼接成一個矩陣,然后進行卷積,最后得到一個向量表示。深層CNN讓深度語義特征提取取得進步。
3.對話機器人
觀察并理解人類對話
如何建立龐大的QA(問答組)
爬取網(wǎng)上的數(shù)據(jù)(1.定義一個爬蟲;2.抽取答案;3.選取答案)
如何讓機器回答一個具體的問題:
1.??問題分類、問題理解
2.??求問題和檢索答案段落的文本相似性,答案搜索和答案提取
3.??判斷答案是否由一個段落蘊含(蘊含關系,為了評價從一段文字中得到的推論是否符合原文的本意),選擇合適的答案
檢索式模型(采用人工制作的回復庫)
生成式模型(可以重新提及輸入中的實體并帶給你對話的感覺)
如何判斷對話準確性
BLEU評測方法
4.? 視覺識別
表情識別流程圖
Dlib中包含CNN
Openface庫專門針對人臉檢測和分類
深度卷積網(wǎng)絡(CNN)
演變路徑為(1)更深的網(wǎng)絡;(2)增強卷積的功能;(3)目標檢測;(4)反卷積
反卷積主要用來還原卷積過程中的某一層的過程,將卷積過程可視化
生成式對抗網(wǎng)絡(GAN):建立一個學習模型,模擬生成模型和判別模型,兩者不斷競爭提高兩個模型的能力,LeCun評價GAN是20年來機器學習領域最酷的想法)
更深的網(wǎng)絡——>深度太深帶來網(wǎng)絡的退化,性能也逐步降低——>加入殘差
通過的提高精度的方法:
1.聯(lián)合模型:(1)將深度網(wǎng)絡視為單一基類分類器;(2)使用深度網(wǎng)絡來提取特征,并用n-1層的輸出作為分類器的輸入
對于第二種方法:嘗試以ReNet50、Inception v3、Xception三個模型為基礎模型,在n-1層做特征合并,最后輸出表情分類,網(wǎng)絡結(jié)構如下:
2.DSD(Dense Sparse Dense)訓練方法
具體步驟如下:
(1)? 初始的完整網(wǎng)絡訓練(Dense):目的是找到需要剪枝的單元或權重;
(2)? 剪枝后網(wǎng)絡訓練:也就是稀疏結(jié)構(Sparse)訓練根據(jù)第一步的結(jié)果,選擇需要剪枝的單元或者權重去除,剪枝后再次進行網(wǎng)絡訓練
(3)? 再恢復到完整網(wǎng)絡訓練(Dense):將所有剪枝的單元權重恢復,初始賦值為0,再次進行訓練
如何增加訓練數(shù)據(jù)?
通過隨機變換圖像的大小、顏色、主體的位置等來將一幅圖像增加到多幅圖像,相當于將數(shù)據(jù)擴展了n倍。
如何防止過擬合?
Dropout:在模型訓練時隨機讓網(wǎng)絡的某些隱含層節(jié)點的權重不工作,人為得隨機讓幾個神經(jīng)元失效
其他經(jīng)驗
l? 轉(zhuǎn)化為RGB的色彩空間更利于學習
l? 一般使用全連接層用于最后輸出
l? 訓練數(shù)據(jù)的干凈程度比數(shù)據(jù)大小更重要
l? 如果不能增加圖像尺寸,減少卷積層的stride也可以達到同樣的提取特征的效果
目標檢測
第一階段:傳統(tǒng)思路
區(qū)域選擇-特征提取-分類器
第二階段:基于R-CNN的深度學習目標檢測算法
R-CNN算法流程:
1.??利用Selective Search算法輸入圖像中提取200個左右的區(qū)域作為CNN的輸入
2.??將每個Region Proposal縮放為227*227的大小并輸入到CNN
3.??將每個Region Proposal 提取到的CNN特征輸入到SVM進行分類
該方法缺點是算法步驟繁瑣,耗時
SPP-NET算法:
只對圖像提取一次卷積層特征,然后將Region Proposal提取的候選區(qū)域在原圖的位置映射到卷積層特征上,從而節(jié)省時間
Fast R-CNN(ICCV2015)
FaseterR-CNN(NIPS2015)
其核心是RPN和權值共享
權值共享(RPN和Fast R-CNN共享卷積層的特征)
第三階段:基于回歸方法的深度學習目標檢測算法
回歸:給定輸入圖像,直接在卷積層的多個位置回歸出這個位置的類別,目標邊框和置信度
YOLO算法:
端到端的訓練過程,直接在卷積層的多個位置回歸出這個位置的類別,目標邊框,從而節(jié)省了大量提取邊框的時間,速度達到實時監(jiān)測的條件。
缺點在于檢測精度不高
SSD算法:
SSD結(jié)合了YOLO的回歸思想和Faster R-CNN的anchor機制,從而解決Faster R-CNN速度慢和YOLO精度不準的問題
算法應用:
>藝術風格畫
(2016這個算法剛出來的時候,一個年輕人推出一個叫Prisma的APP)
>看圖說話:用文字描述圖像
(BiRNN+CNN)
>語音識別
(RNN+CNN)
5.? 強化學習實踐
強化學習幾個概念:
以吃豆子游戲為例
環(huán)境( environment ):邊界或者說移動范圍,還有一些規(guī)則,比如規(guī)定吃到東西單細胞生物就可以長大,吃到病毒就掛掉重新開始
獎勵( rewards ):獎勵有兩個,一個是吃到微生物就可以成長,定義該獎勵是正值;另一個是吃到病毒就減分或掛掉,定義該獎勵為負值
動作( actions ):允許的單細胞生物的動作
MDP過程(馬爾科夫過程)
狀態(tài)(states)
動作集(actions)
狀態(tài)轉(zhuǎn)移概率(Psa)
獎勵函數(shù)(reward)
折扣因子(discount
factor,gamma):對未來獎勵的不確定的表示
強化學習和最優(yōu)路徑選擇的不同在于
強化學習不能窮盡所有的路徑,因為根本看不到最終的狀態(tài)
理解Q網(wǎng)路
Q學習過程:
def learnQ(self,
state, action, reward,value)
oldv=self.q.get((state,action),None)
if old is None:
self.q[(state,action)]=reward
else:
self.q[(state,action)]=oldv+self.alpha*(value-oldv)
模擬物理世界:OpenAI
openAI是為強化學習創(chuàng)造了一個虛擬的世界,這個世界模擬了現(xiàn)實生活中的各種物理規(guī)律,在這里智能體才能很好完成交互。
如何用openAI實現(xiàn)一個DQN:

「DQN非常有用,這個也許是可以應用在笑臉識別中的,通過不斷識別笑臉強化學習過程,具體怎么實現(xiàn)呢?」
DQN過程的圖表化
使用TensorBoard進行可視化
關于強化學習的思考
1.?? 訓練數(shù)據(jù)的獲取方式:強化學習的任務是學習一個新的目標函數(shù),其訓練信息是從跟環(huán)境的互動而得到
2.?? 探索:學習器面臨一個權衡過程,是選擇新數(shù)據(jù)還是選擇已經(jīng)學習過了
3.?? 目標:強化學習的數(shù)據(jù)是序列的交互的,并且有反饋,本質(zhì)是一個決策模型,監(jiān)督學習更偏向于在固定數(shù)據(jù)中尋找答案
4.?? 長期學習:強化學習需要使用先前獲得經(jīng)驗和知識在學習新任務時減少樣本復雜度,并且整個過程是不停迭代的
5.?? 強化學習具有自我進化能力
知識的形成要素:
記憶網(wǎng)絡的發(fā)展
LSTM(長短時模型)通過隱行的共享記憶結(jié)構,不完全得實現(xiàn)知識存儲
NTM(神經(jīng)圖靈機)包含神經(jīng)網(wǎng)絡控制器和存儲器組,模擬大腦皮層的記憶功能,但是只能接受少量新任務觀測
「仿生學非常值得研究,里面有促進應用學科發(fā)展的力量」
MANN相比于NTM在每次讀寫存儲過程會選擇最近利用的存儲位置
終極理想:終身學習
讓機器能夠自主得終身學習
一個終身學習系統(tǒng)包含四個基礎部分:
知識庫(Memory)
控制器(Controller)
知識轉(zhuǎn)移或知識應用(Read)
知識歸納(Write)
6.? 預測和推薦
股票預測應用
「有空務必嘗試」
1.?? 先提取個股數(shù)據(jù)
(1)? 股票的日線和30日線
(2)? 輿論數(shù)據(jù):論壇發(fā)帖數(shù)據(jù)
(3)? 經(jīng)濟環(huán)境數(shù)據(jù)
預測第二天漲跌用[0,1]表示漲,[1,0]表示跌
2.數(shù)據(jù)處理
Csv格式保存數(shù)據(jù)
2.?? 模型搭建:圈定MLP、LSTM、xgboost、多層卷積、
【按照作者改進的量化投資模型實際測試產(chǎn)生6%以上的盈利】
思考
至此完成本書的閱讀
這本書應該是我目前讀過實用性最強、最清晰的介紹類書籍
但是目前只是形成了完整的知識架構,對具體算法缺少程序級的理解
需要認真讀程序,逐個理論攻破
越學習越覺得自己無知