張嘉崴
每週三 18:00-19:00,遇段考停課
理論為主,實作為輔
Pytorch
時間 | 課程內容 |
---|---|
1 | 課程簡介 |
2-5 | 神經網路&梯度下降&反向傳播 |
6-8 | 卷積神經網路(CNN)&Pytorch實作 |
9 | 自動編碼機(Autoencoder) |
10 | 各種神奇的網路 |
11 | 生成對抗網路(GAN) |
12 | 遞迴神經網路(RNN)&下學期預告 |
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)
輸入
讓結果的和為1
(機率)
輸出
輸入
輸出
輸出的機率 | 取對數 | 標籤 | Loss |
---|---|---|---|
0.66 | -0.416 | 0 | 0 |
0.33 | -1.108 | 1 | 1.108 |
0.01 | -4.605 | 0 | 0 |
上萬個
不穩定
效率不佳
十個百個
穩定
有效率
TRAIN:寫作業
VAL:小考
實際上戰場
SGD:
速度+阻力的概念
w | v | 偏導數 |
---|---|---|
0.1 | 0 | 0.01 |
0.09 | -0.01 | 0.01 |
0.07 | -0.02 | 0.01 |
0.04 | -0.03 | 0.01 |
0.0 | -0.04 | 0.01 |
9
9
Encoder
Decoder
Code
AutoEncoder
class Encoder(nn.Module):
def __init__(self):
self.l1 = nn.Linear(784,300)
self.l2 = nn.Linear(300,100)
self.l3 = nn.Linear(100,30)
self.l4 = nn.Linear(30,10)
self.activation = nn.ReLU()
def forward(self,x):
x = self.activation(self.l1(x))
x = self.activation(self.l2(x))
x = self.activation(self.l3(x))
code = self.l4(x)
return code
class Decoder(nn.Module):
def __init__(self):
self.l1 = nn.Linear(10,30)
self.l2 = nn.Linear(30,100)
self.l3 = nn.Linear(100,300)
self.l4 = nn.Linear(300,784)
self.activation = nn.ReLU()
self.last_activation = nn.Sigmoid()
def forward(self,code):
x = self.activation(self.l1(code))
x = self.activation(self.l2(x))
x = self.activation(self.l3(x))
x = self.last_activation(self.l4(x))
return x
Code
Code
比利
比利
背景
比利
偵測
分割
分類
比利
CNN
CNN
CNN
比利
vgg-16
特徵擷取留下,其他捨棄
比利
比利
背景
卷積
輸入:圖片
輸出:像素所屬類別
特徵
轉置卷積
比利
Region Proposal
可能區塊
Selective Search
Reshape
CNN
特徵
特徵
SVM
線性回歸
邊界
類別
讓偵測眼睛的神經元數值上升
讓模型前端的神經元數值上升
讓模型後端的神經元數值上升
長出風格
長出臉
https://open.kattis.com/problems/mnist2class
Binarized Neural Networks: Training Neural Networks with Weights andActivations Constrained to+1or−1
Generative
Adversarial
Network
生成網路
Generator
G
對抗
判別網路
Discriminator
D
D
真MNIST/假MNIST
[0,1]
抓出贗品
G
騙過判別網路
G
D
分類
x : MNIST data
讓D(x)接近1
讓D(G(z))接近0
z : 隨機雜訊
G(z) : 生成的圖片
最小化
H-Z
Z-H
H-Z
Z-H
真斑馬
真馬
DZ
DH
Z-H
Z-H
H-Z
H-Z
圖片風格轉換
字體轉換
增加訓練資料
視覺藝術
文字圖片轉換
文字圖片轉換
圖片生成
增加解析度
RNN
CNN
NN
RCNN
Reinforcement Learning
GAN
Model Pretraining
Auto Encoder
U Net
LSTM
Transformer
時間 | 課程內容 |
---|---|
1-3 | 課程簡介&神經網路&梯度下降&反向傳播 |
4-5 | RNN&LSTM&GRU |
6-7 | Reinforcement Learning |
8-9 | Attention&Transformer |
10 | 雜談 |
11 | 傳承 |
投影片暫存
0.0
0.1
0.4
-0.8
1.9
-0.4
-0.3
-0.1
0.1
1.4
0.0
0.1
0.4
-0.8
1.9
-0.4
-0.3
-0.1
0.1
1.4
0.5
0.6
0.7
0.1
0.99
0.3
0.3
0.4
0.6
0.9
0
0
0
0
1
0
0
0
0
0
分類手寫數字
找L的最小值
"沒有微分解決不了的問題,如果有,二次微分"
--牛頓沒說過
0.1
0.1
0.4
0.5
0.5
0.2
0.7
0.8
0.4
0.3
類別0
類別9
類別1
類別5
...
...
0
0
0
0
1
0
0
0
0
0