放學社課-深度學習
張嘉崴
1. 學期簡介
1. 學期簡介
講師簡介
- 225 張嘉崴
- 熱愛深度學習
- C++手刻神經網路
- 毛語錄生成器
- FB:張嘉崴
1. 學期簡介
課程簡介
每週三 18:00-19:00,遇段考停課
理論為主,實作為輔
Pytorch
1. 學期簡介
課表
時間 | 課程內容 |
---|---|
1 | 課程簡介 |
2-5 | 神經網路&梯度下降&反向傳播 |
6-8 | 卷積神經網路(CNN)&Pytorch實作 |
9 | 自動編碼機(Autoencoder) |
10 | 各種神奇的網路 |
11 | 生成對抗網路(GAN) |
12 | 遞迴神經網路(RNN)&下學期預告 |
1. 學期簡介
能力需求
- Python
- 加法
- 乘法
SoloLearn
1. 學期簡介
能力奢求
- 簡單線性代數
- 微分鏈鎖率
- 認識神經網路
3Blue1Brown
1. 學期簡介
什麼是機器學習?
機器
有用的機器
資料
機器學習
支持向量機
迴歸模型
神經網路
氣溫、濕度
風速、雨量
熱食部營業額
新增病例數
隔天是否下雨
判斷隔天會不會下雨
1. 學期簡介
什麼是深度學習?
if model.name[-2:] == '網路':
print('深度學習')
else:
print('機器學習')
1. 學期簡介
Google colab
1. 學期簡介
來玩吧
2. 乘法&神經網路
2.2 乘法
乘法
我來機器學習,
你給我上乘法??
乘法 \(\rightarrow\) 相似程度
2.2 乘法
怎麼說?
2.2 乘法
相似程度
\(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\)
2.2 乘法
圖片相似程度
2.2 乘法
圖片相似程度
2.2 乘法
圖片相似程度
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
2.2 乘法
類別0
類別9
類別1
類別5
...
...
2.2 乘法
類別0
類別9
類別1
類別5
...
...
輸入 input
權重 weight
輸出 output
2.3 神經網路
幾乎是神經網路
bias偏值
2.3 神經網路
神經網路
2.3 神經網路
\(\sigma\)函數
2.3 神經網路
神經網路
- 把圖片變數字
- 做乘法
- 加入偏值
- 放入\(\sigma\)函數
2.4 實作
Numpy
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))
2.5 深度神經網路
深度神經網路
為何要多層?
2.5 深度神經網路
為何要多層?
2.5 深度神經網路
為何要多層?
2.5 深度神經網路
為何要多層?
輸入(像素)\(\rightarrow\)簡單特徵(小線段)\(\rightarrow\)複雜特徵(圓圈、直線)\(\rightarrow\)類別
輸入(像素)\(\rightarrow\)類別
2.5 深度神經網路
深度神經網路的數學
2.5 深度神經網路
深度神經網路的數學
2.5 深度神經網路
總結
2.6 收尾
深度神經網路
輸入:圖片(像素值)
輸出:類別
參數:權重和偏值們
Numpy Code
2.6 收尾
3. 畢氏定理&Loss
3.1 畢氏定理
一維的情況
\(A(x_0)\,\,B(x_1)\)
\(d(A,B)^2=|x_1-x_0|^2\)
3.1 畢氏定理
二維的情況
\(A(x_0,y_0)\,\,B(x_1,y_1)\)
\(d(A,B)^2=(x_1-x_0)^2+(y_1-y_0)^2 \)
3.1 畢氏定理
三維的情況
\(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\)
3.1 畢氏定理
\(n\)維的情況
\(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}\)
3.2 損失函數
問題
3.2 損失函數
損失函數
評估神經網路表現如何
3.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
錯!
3.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
3.2 損失函數
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}\)
3.2 損失函數
損失函數應用
分類手寫數字
找損失函數的最小值
3.2 損失函數
抽象一點
損失函數:L
輸入:神經網路的所有參數 \(\theta\)
輸出:一個數字(Loss值)
參數:圖片資料庫
3.2 損失函數
函數比較
損失函數
輸入:神經網路的所有參數 \(\theta\)
輸出:一個數字(Loss值)
參數:圖片資料庫
深度神經網路
輸入:圖片資料庫
輸出:類別
參數:神經網路的所有參數\(\theta\)
3.3 實作
實作
def loss_function(output,label):
loss = np.sum((output-label)**2,axis = -1)
all_loss = np.mean(loss)
return all_loss
3.4 搜尋空間
簡單一點
兩個參數、三個維度
3.4 搜尋空間
7850+1維的空間
784個輸入
10個輸出
784X10個權重
10個偏值
3.5 課後
Matplotlib
4. 梯度下降
想像一下
4.1 宏觀的梯度
4.1 宏觀的梯度
海拔很高
看不到路
只能感覺腳下坡度
朝最斜的地方走去
神經網路Loss很高
不知道其他地方的Loss
算出梯度
背對該方向走去
4.1 宏觀的梯度
4.2 梯度
梯度
點A的x方向斜率為-0.416
點A的y方向斜率為1.248
4.2 梯度
梯度
往梯度方向走,上升最快
往負梯度方向走,下降最快
4.2 梯度
神經網路的梯度
7000多維的山?
2個參數 \(\rightarrow\) 3維的山
(w,b,L)
4.3 微觀的梯度
7000多維的山
把每個變數想成一個滑桿
4.3 微觀的梯度
神經網路的梯度
把梯度想成敏感度
4.4 梯度計算
Warning
4.4 梯度計算
神經網路計算樹
神經網路計算樹
4.4 梯度計算
神經網路計算樹
4.4 梯度計算
求\(w^{(3)}\)對\(L\)的靈敏度
\(w^{(3)}\) 對\(z^{(3)}\)的靈敏度
\(z^{(3)}\) 對\(a^{(3)}\)的靈敏度
\(a^{(3)}\) 對\(L\)的靈敏度
鏈鎖率
4.4 梯度計算
鏈鎖率
4.4 梯度計算
4.4 梯度計算
多神經元的梯度
4.4 梯度計算
多神經元的梯度
深度學習精隨
4.5 梯度下降
4.5 梯度下降
3Blue1Brown
4.6 課後
Pytorch -tensor
4.6 課後
Pytorch
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)
5. 神經網路實作
5.1 激勵函數
激勵函數
其他激勵函數
- Leaky ReLU
- Swish
- Softmax
- ELU
5.1 激勵函數
softmax
5.1 激勵函數
直覺
輸入
讓結果的和為1
(機率)
輸出
5.1 激勵函數
修正的直覺
輸入
輸出
5.1 激勵函數
softmax
5.2 損失函數
cross entropy
- \(y\)標籤
- \(\hat y\)輸出的機率
- \( n\)類別數
5.2 損失函數
栗子
輸出的機率 | 取對數 | 標籤 | Loss |
---|---|---|---|
0.66 | -0.416 | 0 | 0 |
0.33 | -1.108 | 1 | 1.108 |
0.01 | -4.605 | 0 | 0 |
5.2 訓練細節
不裝Batch
上萬個
不穩定
效率不佳
5.2 訓練細節
裝Batch
十個百個
穩定
有效率
5.2 訓練細節
overfitting
背答案
5.2 訓練細節
train&val
TRAIN:寫作業
VAL:小考
5.2 訓練細節
TEST
實際上戰場
5.2 訓練細節
例子
5.3 Optimizer
SGD
5.3 Optimizer
momentum
SGD:
速度+阻力的概念
5.3 Optimizer
栗子
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 |
5.3 Optimizer
更強的optimizer
- AdaGrad
- Adam(最常用的)
- RAdam
5.4 其他東西
- Dropout
- Batchnorm
5.5 課後
pytorch神經網路
6. 卷積神經網路
6.1 神經網路的問題
神經網路的問題
9
9
6.2 卷積
6.3 各種參數
- stride
- padding
6.4 多多實作
Pytorch CNN
6.4 恭喜
恭喜
7. Pytorch實作
7.1 複習
7.2 實作
8. 自動編碼機
8.1 自動編碼機
What
Encoder
Decoder
Code
AutoEncoder
8.1 自動編碼機
how
8.1 自動編碼機
how
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
8.1 自動編碼機
應用
8.2 往CNN想
CNN Autoencoder
Encoder
- Conv / Activation
- Conv / Activation
- MaxPool
- Conv / Activation
- Conv / Activation
- MaxPool
- ......
Code
8.2 往CNN想
CNN Autoencoder
DEcoder
- 反的卷積??
- 反的池化??
轉置卷積
8.2 往CNN想
用途
8.2 往CNN想
Code
比利
比利
背景
比利
偵測
分割
分類
9. 卷積神經網路應用
9.1 複習
我們怎麼用CNN?
比利
CNN
9.2 Model-pretraining
model-pretraining
CNN
CNN
比利
9.2 Model-pretraining
how
vgg-16
特徵擷取留下,其他捨棄
9.2 Model-pretraining
實作
- vgg
- resnet
- densenet
9.3 圖片分割
圖片辨識
比利
圖片分割
比利
背景
9.3 圖片分割
圖片分割 naive
卷積
輸入:圖片
輸出:像素所屬類別
特徵
轉置卷積
9.3 圖片分割
轉置卷積
9.3 圖片分割
圖片分割 U-net
9.3 圖片分割
其他圖片分割
- FCN
- SegNet
- DeconvNet
9.3 圖片分割
圖片偵測
比利
9.4 圖片偵測
9.4 圖片偵測
RCNN
Region Proposal
可能區塊
Selective Search
Reshape
9.4 圖片偵測
RCNN
CNN
特徵
9.4 圖片偵測
RCNN
特徵
SVM
線性回歸
邊界
類別
9.4 圖片偵測
9.4 圖片偵測
深入圖片偵測?
- Fast-RCNN(2015)
- Faster-RCNN(2015)
- Mask-RCNN(2017)
- 更多我也不知道的
9.5 Deep Dream
9.5 Deep Dream
How?
9.5 Deep Dream
How?
- 輸入:調整的圖片
- 輸出:觀察的一層神經元
- 參數:固定的神經網路
- 更新輸入:梯度上升
9.5 Deep Dream
why?
讓偵測眼睛的神經元數值上升
讓模型前端的神經元數值上升
讓模型後端的神經元數值上升
長出風格
長出臉
9.6 後記
更多有趣的
- Deep Style
- Deep Fake
10. 其他神奇的網路
10.1 二元神經網路
https://open.kattis.com/problems/mnist2class
10.1 二元神經網路
Binarized Neural Networks: Training Neural Networks with Weights andActivations Constrained to+1or−1
10.2 Adversarial Attack
11. 生成對抗網路
11.1 GAN
生成對抗網路
Generative
Adversarial
Network
11.1 GAN
生成對抗網路
生成網路
Generator
G
對抗
判別網路
Discriminator
D
11.1 GAN
判別網路
D
真MNIST/假MNIST
[0,1]
抓出贗品
11.1 GAN
生成網路
G
騙過判別網路
11.1 GAN
生成對抗網路
G
D
分類
11.1 GAN
抽象化
判別網路D
x : MNIST data
讓D(x)接近1
讓D(G(z))接近0
生成網路G
z : 隨機雜訊
G(z) : 生成的圖片
最小化
11.2 DcGAN
DCGAN
11.3 cgan
CGAN
11.4 cycle gan
翻譯
11.4 cycle gan
馬&斑馬
H-Z
Z-H
11.4 cycle gan
馬&斑馬
H-Z
Z-H
真斑馬
真馬
DZ
DH
11.4 cycle gan
cycle Gan
Z-H
Z-H
H-Z
H-Z
11.5 應用
圖片風格轉換
字體轉換
增加訓練資料
視覺藝術
文字圖片轉換
文字圖片轉換
圖片生成
增加解析度
11.6 code
GAN
12. 遞迴神經網路
&下集預告
12.1 下學期簡介
課程簡介
RNN
CNN
NN
RCNN
Reinforcement Learning
GAN
Model Pretraining
Auto Encoder
U Net
LSTM
Transformer
12.1 下學期簡介
課表
時間 | 課程內容 |
---|---|
1-3 | 課程簡介&神經網路&梯度下降&反向傳播 |
4-5 | RNN&LSTM&GRU |
6-7 | Reinforcement Learning |
8-9 | Attention&Transformer |
10 | 雜談 |
11 | 傳承 |
12.2 自學資源
臺大李宏毅教授
12.2 自學資源
Kaggle
12.2 自學資源
Medium
12.2 自學資源
書
12.2 自學資源
Youtube
12.2 自學資源
看論文
- Google scholar
- IEEE
- arXiv
12.2 自學資源
問我
考幹
投影片暫存
ˇ3.1 複習
目標
ˇ3.1 複習
神經網路
0.0
0.1
0.4
-0.8
1.9
-0.4
-0.3
-0.1
0.1
1.4
ˇ3.1 複習
與正解的距離
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
ˇ3.1 複習
噁心的數學
ˇ3.3 深度神經網路
深度神經網路的數學
ˇ3.3 深度神經網路
目標
分類手寫數字
找L的最小值
"沒有微分解決不了的問題,如果有,二次微分"
--牛頓沒說過
2.3 神經網路
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
Copy of 放課 深度學習
By yennnn
Copy of 放課 深度學習
- 492