張嘉崴
每週三 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\)類別
深度神經網路
輸入:圖片(像素值)
輸出:類別
參數:權重和偏值們
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
loss = 2.14
loss = 0.95
損失函數:L
輸入:神經網路的所有參數 \(\theta\)
輸出:一個數字(Loss值)
參數:圖片資料庫
損失函數
輸入:神經網路的所有參數 \(\theta\)
輸出:一個數字(Loss值)
參數:圖片資料庫
深度神經網路
輸入:圖片資料庫
輸出:類別
參數:神經網路的所有參數\(\theta\)
def loss_function(y_hat,y):
loss = np.sum((y_hat-y)**2,axis = -1)
all_loss = np.mean(loss)
return all_loss
兩個參數、三個維度
784個輸入
10個輸出
784\(\times\)10個權重
10個偏值
輸入
讓結果的和為1
(機率)
輸出
輸入
輸出
海拔很高
看不到路
只能感覺腳下坡度
朝最斜的地方走去
神經網路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
Query
Key
Value
如果\(q_0\)跟\(k_2\)相近的話,就可以用\(v_2\)的值來算\(a'_0\)