深度學習概述+Colab配置+pytorch初次使用
1.視頻學習基本知識點總結
機器學習使用情況:問題規模大->准則復雜度大->數據集->有意義的模式->沒有解析解
機器學習:模型、策略、算法
機器學習模型:
模型分類:(數據標記)
監督學習:輸出空間已知
無監督學習:數據標記未知,目的在於發現數據中有意義信息
半監督學習:部分數據標記已知
強化學習:數據標記未知,但知道與輸出目標相關的反饋(決策類問題)
模型分類:(數據分布)
參數模型:對數據分布進行假設,用有固定數目的參數進行解決
非參數模型:不對數據分布進行假設。
模型分類:(建模對象)
生成模型:對輸出的聯合分布P(X,Y)建模
判別模型:對條件分布P(Y|X)建模
人工智能>機器學習>深度學習
深度學習存在問題:
算法輸出不穩定,容易被攻擊
模型復雜度高,難以糾錯和調試
模型層級符合程度高,參數不透明
端到端訓練方式對數據依賴性強,模型增量性差(樣本量小時,無法體現強大的擬合能力
對開放性推理問題無能為力(比如:鸚鵡、烏鴉)
人類知識無法有效引入進行監督,機器偏見難以避免(數據並非中立)
連接主義:自下而上(模擬人)+符號主義:自上而下 ???
神經網絡
多輸入但輸出、空間整合/時間整合、興奮性/抑制性輸入、閾值特性
激活函數
萬有逼近定理:
如果一個隱層有足夠多的神經元,三層前饋神經網絡能以任意禁錮逼近任意預定的連續函數
當隱層足夠寬時,雙隱層感知器可以逼近任意非連續函數:可以解決任何復雜分類問題。
神經網絡學習如何利用矩陣的線性變換加激活函數的非線性變換,將原始輸入空間投影到線性可分的空間去分類/回歸。
增加節點數:增加維度(增加線性轉換能力)
增加層數:增加激活函數次數(增加非線性轉換次數)
在結點數目一定的條件下,瘦高網絡更好一些(深度)(並非越深越好)
多層神經網絡可以看成一個復合的非線性多元函數
梯度:多元函數f(x,y)在每個點可以有多個方向,每個方向都可以求導,其中導數最大的方向
因此梯度是一個向量
無約束優化方法:梯度下降(沿負梯度方向更新可使函數值下降)
殘差:損失函數在某個結點的偏導(反饋過程)
梯度消失:誤差反向傳播(增加深度會造成梯度消失,誤差無法傳播)
自編碼器:
假設輸入輸出相同,沒有額外監督信息,將自己輸入當成輸出
一般是多層神經網絡(先編碼再解碼)
訓練目標:使輸出層和輸入層誤差最小
中間隱層代表輸入特征,可以最大程度代表原輸入信號
受限玻爾茲曼機(RBM)
特點:
只包含兩層神經網絡:可見層v(輸入層)和隱藏層h
不同層全連接(二分圖)
目的:
讓隱藏層得到的可見層v’與原來的可見層v分布一致,從而使隱藏層作為可見層輸入的特征
兩個方向權重w共享,偏執不同
模型參數:w,c,b
假設可見層和隱藏層結點都是(0,1),兩個方向的概率就是sigmoid
DBN(深度信念網絡):由若干RBM堆疊,最后加一個監督層
訓練由低到高逐層訓練
pytorch學習
1.基本定義方法及部分解釋
torch.tensor( )
參數可以是一個數、向量、矩陣、張量
torch.ones( x,y):張量全為1(同時有torch.float32( ),torch.int64( )等多種定義類型
torch.empty(x,y )、torch.rand(x,y)、torch.zeros( )
x.new_ones(x,y):繼承原有x的dtype和device
torch.randn_like(x,dtype= )保持原有大小,重新定義dtype
torch.arange(1,5,step):[1,2,3,4]
2.基本數學運算
基本:
abs/sqrt/div/exp/fmod/pow/cos/sin/asin/atan2/cosh/ceil(向上舍入)/round(四舍五入)/floor/trunc(截斷)
布爾:
gt/lt/ge/le/eq/ne/topk/sort/max/min
線性:
Trace(對角線元素之和)/diag(對角線元素)/mm/bmm(矩陣乘法)/dot(內積)/cross(外積)/invese/svd
其它及表示方法:
numel( ):返回數量
m[:,x]:表示第x列所有元素
m@v:求點積
m.t( )/m.transpose( ):求轉置
torch.linspase(start,end,step) :返回一個1維張量,包含在區間start和end上均勻間隔 的step個點
總結:
運算在colab上都能運行通過,但應對許多運算尤其是線性代數方面進行復習。
螺旋數據分類學習:
1.構建模型

2.構建線性模型分類
訓練所用線性模型:
model = nn.Sequential(
nn.Linear(D, H),
nn.Linear(H, C)
)
訓練結果:

得到訓練模型:

發現線性模型對分類的准確度較低
3.構建兩層神經網絡:
訓練所用模型:
model = nn.Sequential(
nn.Linear(D, H),
nn.ReLU(),
nn.Linear(H, C)
)
訓練結果:

訓練模型:

發現在使用ReLu( )激活函數后准確率明顯提高。
總結:
通過本次螺旋模型的訓練,了解了訓練一個基本模型的步驟,將在緒論中學到的知識(比如:激活函數、損失函數、梯度下降優化,反向傳播等)在實戰中加深了理解。
