張嘉崴
每週三 18:00-19:00,遇段考停課
理論為主,實作為輔
Pytorch
RNN
CNN
NN
Reinforcement Learning
LSTM
Transformer
時間 | 課程內容 |
---|---|
1-2 | 課程簡介&神經網路&梯度下降&反向傳播 |
3-4 | RNN & Transformer |
5 | Unsupervised Learning |
6-7 | Reinforcement Learning |
8 | 傳承 |
SoloLearn
3Blue1Brown
機器
有用的機器
資料
機器學習
支持向量機
迴歸模型
神經網路
氣溫、濕度
風速、雨量
預測明天股價
if model.name[-2:] == '網路':
print('深度學習')
else:
print('機器學習')
\(A=[-2,-1,1,1,1]\)
\(B=[-1,-2,1,1,1]\)
\(C=[2,1,-1,1,-1]\)
\(A \cdot B = 7\)
\(A \cdot C = -6\)
0.1
1.7
-0.4
-0.5
0.1
-0.2
-0.7
0.9
-1.1
0.3
0.0
0.1
0.4
-0.8
1.9
-0.4
-0.3
-0.1
0.1
1.4
類別0
類別9
類別1
類別5
...
...
類別0
類別9
類別1
類別5
...
...
輸入 input
權重 weight
輸出 output
bias偏值
\(\sigma\)函數
import numpy as np
a = np.array([0.1,0.2,0.3])
w = np.array([[0.1,0.2,0.3],[0.4,0.5,0.6],[0.7,0.8,0.9]])
b = np.array([0,0,-1])
print(w@a)
a2 = w@a+b
print(a2)
def sigmoid(x):
return 1 / (1+np.exp(-x))
print(sigmoid(a2))
輸入(像素)\(\rightarrow\)簡單特徵(小線段)\(\rightarrow\)複雜特徵(圓圈、直線)\(\rightarrow\)類別
輸入(像素)\(\rightarrow\)類別
深度神經網路
輸入:圖片(像素值)
輸出:類別
參數:權重和偏值們
\(A(x_0)\,\,B(x_1)\)
\(d(A,B)^2=|x_1-x_0|^2\)
\(A(x_0,y_0)\,\,B(x_1,y_1)\)
\(d(A,B)^2=(x_1-x_0)^2+(y_1-y_0)^2 \)
\(A(x_0,y_0,z_0)\,\,B(x_1,y_1,z_1)\)
\(d(A,B)^2=\)
\((x_1-x_0)^2+(y_1-y_0)^2+(z_1-z_0)^2\)
\(A(x_0,y_0,z_0...)\,\,B(x_1,y_1,z_1...)\)
\(d(A,B)^2=\)
\((x_1-x_0)^2+(y_1-y_0)^2+(z_1-z_0)^2+...\)
\(\sum{x^2}\)
0.0
0.1
0.4
0.8
0.5
0.4
0.3
0.1
0.1
0.9
錯!
0.0
0.9
0.1
0.0
0.0
0.2
0.1
0.91
0.1
0.2
錯!
0.0
0.1
0.4
0.8
0.5
0.4
0.3
0.1
0.1
0.9
0.0
0.9
0.1
0.0
0.0
0.2
0.1
0.91
0.1
0.2
0.0
1.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
1.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
距離平方2.14
距離平方0.95
0.0
0.1
0.4
0.8
0.5
0.4
0.3
0.1
0.1
0.9
0.0
1.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
距離平方2.14
\(\sum{(\hat y-y)^2}\)
分類手寫數字
找損失函數的最小值
損失函數:L
輸入:神經網路的所有參數 \(\theta\)
輸出:一個數字(Loss值)
參數:圖片資料庫
損失函數
輸入:神經網路的所有參數 \(\theta\)
輸出:一個數字(Loss值)
參數:圖片資料庫
深度神經網路
輸入:圖片資料庫
輸出:類別
參數:神經網路的所有參數\(\theta\)
def loss_function(output,label):
loss = np.sum((output-label)**2,axis = -1)
all_loss = np.mean(loss)
return all_loss
兩個參數、三個維度
784個輸入
10個輸出
784X10個權重
10個偏值
海拔很高
看不到路
只能感覺腳下坡度
朝最斜的地方走去
神經網路Loss很高
不知道其他地方的Loss
算出梯度
背對該方向走去
點A的x方向斜率為-0.416
點A的y方向斜率為1.248
往梯度方向走,上升最快
往負梯度方向走,下降最快
7000多維的山?
2個參數 \(\rightarrow\) 3維的山
(w,b,L)
把每個變數想成一個滑桿
把梯度想成敏感度
求\(w^{(3)}\)對\(L\)的靈敏度
\(w^{(3)}\) 對\(z^{(3)}\)的靈敏度
\(z^{(3)}\) 對\(a^{(3)}\)的靈敏度
\(a^{(3)}\) 對\(L\)的靈敏度
3Blue1Brown
def loss_func(out,lbl):
loss = torch.sum((out-lbl)**2,axis = -1)
all_loss = torch.mean(loss,axis = -1)
return all_loss
learning_rate = 0.1
out = torch.tensor([[0.1,0.1,0.1],[0.1,1.0,0.1]],requires_grad = True)
lbl = torch.tensor([[1.0,0.0,0.0],[0.0,1.0,0.0]],requires_grad = True)
L = loss_func(out,lbl)
print(L)
L.backward()
out = out - learning_rate * out.grad
out.grad = None
lbl.grad = None
L = loss_func(out,lbl)
print(L)
Suzuki
Chang
Rahmaninov
Wolfeschlegelsteinhausenbergerdorff ???
Chinese
Japanese
Russian
"1+1"
"12+345"
"2"
"357"
"314159265358979323+2718281828459045"???
"1+999999999999999999999999"???
RNN
記憶、輸入
記憶
輸出
RNN
RNN
RNN
Chinese
h
C
g
n
a
RNN
Chang
全連接層
\(f_0,f_1\)為激勵函數
Encoder
'+'
'8'
'9'
記憶
Encoder
Encoder
Decoder
'1'
'<sos>'
'7'
Decoder
Decoder
記憶
Start Of Sequence
'1'
'7'
'<eos>'
End Of Sequence