緒論:随着計算能力和資料量的提高,出現PASCAL和ImageNet高品質的資料集,使得神經網絡成為可能(訓練)
一,KNN圖像分類算法
-
python+Numpy基礎
可參看https://zhuanlan.zhihu.com/p/20878530?refer=intelligentunit
- 圖像分類任務是很困難的
- 運用資料集CIFAR10,實作最鄰近算法分類(缺點:訓練時間很短,但測試時間很長)
- K最近鄰算法,找出K個最近點(曼哈頓距離或歐氏距離),選取投票最多的,K&Distance是超參數
如何選取K和距離名額
#在圖像上KNN不常用,測試時間長,向量化距離用于比較圖像不常用
二,線性分類器
單獨的線性邊界劃分
三,線性分類器損失
①優化,正則化R(W)【----選取合适的W函數—,-盡可能考慮每個一個元素,将W權重分布擴充開】,和Loss損失函數
②svm,softmax分類熟悉,選擇合适的線性分類器(svm具有額外的穩定型,分數變化影響不大,反之softmax就不一樣,所有樣量變化都要考慮)
③注意兩個超參數,步長(學習速率),權重正則化參數lambda
④優化方法,用SGD或momtain等方法找到使損失最小的W值(x給定,y為标簽)
四,反向傳播
- 倒推出每一個鍊路(如輸入x,y)對最終的結果(輸出z)影響有多大
- 正梯度,負梯度(損失随它的增大而減小),所有梯度相乘的過程叫反向傳播
- 鍊式法則:局部梯度和最後一層梯度相乘
- 正向傳播存儲大量資料,反向傳播用掉
- 深度學習架構(如Caffe,torch等)就是一個大的運算門的集合(層),并記錄所有層之間聯系的計算圖!!
- 采樣資料,通過前饋得到損失,回報得到梯度,通過對梯度的使用完成權值更新,這就是神經網絡的訓練過程
- 問題,雅克比矩陣中的特殊結構如何求得?
五,神經網絡
- 執行個體:邏輯回歸二層神經網絡訓練函數
- 使用權重w和偏內插補點biase計算出第一個隐含層h,然後計算損失,評分,進行反向傳播回去
- 多種常用激活函數(一般預設max(0,x)),如sigmoid函數具有飽和區梯度0,非零點中心,計算x複雜等缺點,max(Relu)函數也有缺點(非中心對稱,初始化不佳(如-10)無法激活,注意學習速率不要太高),leaky Relu優化max(0.01x,x),其中0.01為α修正參數可調,maxout集合Lrelu,Relu的優點,隻是參數變多了。
- 少量資料可用L-BFGS優化,資料量大的一般用不到
- 神經網絡的深度(層數,資料越複雜越多越好,簡單則不需要太多)和寬度(各層神經元數)
part2
-
列**. 資料預處理**PCA,SVD等方法
. 權重初始化,待深入,很重要,如Batch Nomalization
- 神經網絡隐藏層(hidden layer)
- 訓練資料要過飽和Overfit
- 超參數調整學習速率,正則化參數(以及差量),更新方式
- Track the ratio of weight updates / weight magnitudes:
訓練神經網絡的四個步驟(樣本(标準化,初始化權重等),向前傳播(得到損失),向後傳播(得到每個權重的梯度),用梯度更新【梯度下降】參數(w等))
– 激活函數提供了更多的非線性的資料存儲(處理)方式。
下面所講
– 1,其他參數更新方法,針對SGD更新較慢(y軸快水準慢,波動式前進),但一般還是預設用SGD
- 1,moumentum更新,收斂更快(mu為超參數,v為速度(可初始化為0))好
- 2 nestero momentum (Nag)好好 3,adaGrad update(一般在凸問題中用,回停止學習-0) 針對不同方向的梯度調整快慢(補償)–通過分母(梯度平方),大慢小快 3.2改進版(不會停止學習)
1e-7是平滑因子,隻是未來防止它變0
4,另一種
5,Adam更新(結合MOMENTEUM和RMSprop-like)很好,可以經常采用
beta是超參數0.9,0.995
1.2,優化學習速率(超參數,可用衰減函數控制(一階函數))
其他優化方法
二階函數,求出梯度(碗的曲率),知道怎麼走就不需要學習速率更新就知道怎麼到達最低點了,收斂(但hessian矩陣太大求逆計算量巨大,而基本不采用)
再優化(資料集不大時可用)一般也不用