1. 程式人生 > >sp1.1-1.2 Neural Networks and Deep Learning

sp1.1-1.2 Neural Networks and Deep Learning

 

  Relu這影象也叫線性流動函式 不再用sigmoid函式當啟用函式     相當於max(0,x)函式 比較0和當前值哪個大   可以把隱藏層看作 前面整合       結構化資料基於資料庫 特徵都有明確的定義 非結構化資料比如圖片 音訊 畫素     關於資料規模 不同複雜程度下以及傳統機器學習的表現 紅線是傳統演算法 小規模資料量關鍵是還是看怎麼選特徵值了 各種都差不多 大規模資料量還是看網路了
    從sigmoid到relu修正線性單元 前者梯度容易為0 變為後者梯度下降很快     二元分類: 變為向量表示圖片   每個樣本豎著排列計算比較簡單   利用邏輯迴歸進行二元分類 希望得到概率輸出 0-1之間 加個sigmoid 這門課我們不用右上角的表示法 我們吧B 和W 分開   目標就是優化引數W和b     代價函式不用平方差避免了非凸函式 最後不好優化 凸函式才有最優啊 !
這個邏輯迴歸損失函式 意義就是當y=1時候 極端情況 接近1 那麼等於-logy^ 要大 那麼Y^要大 Y^=sigmoid(wx+b)要大 就是概率大 當Y=0時候 =-log(1-y^) 這裡y^要小才行 正好標籤和sigmoid算出來相匹配啊   總的代價函式 是所有損失函式的平均數 這裡損失函式反應的是要優化的引數本身   這裡就是算出所有樣本的 損失了 才不斷求導 然後再來一遍     不斷求導 一點點移動到代價函式最低點 只要每次減去導數就行了 不管在左邊還是在右邊 都正好是往最低點走的
    選這個代價函式簡單解釋: 看成概率: 加個log讓他嚴格的單調函式 最後算出來是負的 所以最後log前再加個負號 log裡面原本乘的 出來變加的 還是極大似然估計   這列他把log看成ln好算   鏈式求導 先對梯度函式求 dl/da= ylogy‘+(1-y)log1-y’那個 這裡是按照ln的 出來就是dl/da= - y/a +(1-y)/1-a 然後對Z求導 dl /dz=dl/da *da/dz=- y/a +(1-y)/1-a * da/dz=- y/a +(1-y)/1-a* a(1-a)= a-y dl/dw=dl/da*da/dz *dz/dw= x1 * (a-y)   當有m個樣本時更新: 全域性的代價函式求出來了吧,同樣求導算W 和 b   完整過程 m個樣本 迴圈 進去 累加算損失函式 順便求導一次 最後除個總數 求個平均 這裡假設兩個特徵值 這裡整個算一遍 才是一個平均的導數啊 然後我們才W 減去這個導數 需要倆for 外面這一個 裡面要是特徵多了 也得迴圈吧   用向量化的形式表示 避免for迴圈   最終右邊形式: 兩個for迴圈效率低 還是用向量化算簡單Vectorization 儘量避免for迴圈 可以算一下 時間差幾百倍             學習速率也並不是越小越好         numpy中的廣播Broadcasting 比如想算每個食物碳水化合物熱量佔比 即 carb/一列相加 蘋果 56/(56+1.2+1.8) 下面的reshape可以不寫 因為本來就是1*4的 3*4的除以1*4的矩陣 在numpy中可以算 numpy會自動擴充套件 這種機制就叫廣播     tips: 不要用random.rand(5)寫陣列 因為形狀會是(5,) 而是寫成random.rand(5,1) 而且左邊形式寫自己乘完自己變數了 而不是矩陣   不確定可以用斷言語句判斷一下 在開發一個程式時候,與其讓它執行時崩潰,不如在它出現錯誤條件時就崩潰(返回錯誤)。這時候斷言assert 就顯得非常有用。assert的語法格式:assert expression它的等價語句為:if not expression: raise AssertionError