【cs230】吴恩达Deep Learning-1/3
0. 课程计划
课程地址
2018video地址
2020slide地址
吴恩达书籍Machine Learning Yearning地址
本系列相关链接:
【cs229】吴恩达MachineLearning-1/2
共计10节课,是CS229的后续课程,视频只有2018年的,但是讲义有2020年的。
目的是深入掌握基础知识点,笔记不是重复翻译,而是记录自己的疑问并及时回答自己。
(cs229我是从coursera上看的,也许不是斯坦福的最新video,把所有课程学完之后可以再撸最新更新,但不是现在。)
课程目标:
- 成为DL算法专家(深厚的基础、最新的技术)
- 解决问题
1. DL Intuition
在多分类问题中,输出结点可以有多个。
怎
么
确
定
哪
个
结
点
对
应
哪
个
类
?
−
>
l
a
b
e
l
o
n
e
−
h
o
t
有
什
么
缺
点
?
−
>
不
能
处
理
多
目
标
多
分
类
问
题
L
a
s
t
A
c
t
i
v
a
t
i
o
n
还
使
用
s
i
g
m
o
i
d
吗
?
−
>
用
s
o
f
t
m
a
x
\begin{aligned} 怎么确定哪个结点对应哪个类?&->label\\ one-hot有什么缺点?&->不能处理多目标\\ 多分类问题Last~Activation还使用sigmoid吗?&->用softmax\\ \end{aligned}
怎么确定哪个结点对应哪个类?one−hot有什么缺点?多分类问题Last Activation还使用sigmoid吗?−>label−>不能处理多目标−>用softmax
下面以一个个具体例子来说。
1.1 区分白天、黑夜
样 本 量 多 少 才 够 用 ? − > 经 验 法 : 估 计 问 题 的 复 杂 程 度 , 根 据 其 他 已 经 完 成 的 分 类 器 的 样 本 量 , 类 比 如 何 切 分 训 练 集 ? − > 数 据 集 小 80 % , 数 据 集 大 例 如 几 十 万 , 可 以 98 % 用 于 训 练 数 据 均 衡 吗 ? − > 类 别 间 样 本 数 是 否 相 当 图 像 分 辨 率 怎 么 选 择 ? − > T h e l o w e r , t h e b e t t e r ! 这 样 计 算 量 更 小 ( 64 × 64 ) 。 但 是 也 要 考 虑 : − > 1. 其 他 相 似 项 目 的 经 验 ; 2. 实 际 应 用 场 景 ; 3. 人 类 分 类 能 力 , 多 尺 寸 都 试 试 ; 什 么 网 络 结 构 ? − > 浅 层 全 连 接 就 o k , C N N 大 材 小 用 损 失 函 数 ? − > 交 叉 熵 , 二 分 类 \begin{aligned} 样本量多少才够用?&->经验法:估计问题的复杂程度,根据其他已经完成的分类器的样本量,类比\\ 如何切分训练集?&->数据集小80\%,数据集大例如几十万,可以98\%用于训练\\ 数据均衡吗?&->类别间样本数是否相当\\ 图像分辨率怎么选择?&->\colorbox{aqua}{$The~lower, the~better!$}这样计算量更小(64\times64)。但是也要考虑:\\ &-> 1. 其他相似项目的经验; 2. 实际应用场景; 3. 人类分类能力,多尺寸都试试;\\ 什么网络结构?&->浅层全连接就ok,CNN大材小用\\ 损失函数?&->交叉熵,二分类 \end{aligned} 样本量多少才够用?如何切分训练集?数据均衡吗?图像分辨率怎么选择?什么网络结构?损失函数?−>经验法:估计问题的复杂程度,根据其他已经完成的分类器的样本量,类比−>数据集小80%,数据集大例如几十万,可以98%用于训练−>类别间样本数是否相当−>The lower,the better!这样计算量更小(64×64)。但是也要考虑:−>1.其他相似项目的经验;2.实际应用场景;3.人类分类能力,多尺寸都试试;−>浅层全连接就ok,CNN大材小用−>交叉熵,二分类
1.2 人脸Verification
刷学生卡时check是不是本人。
输
入
数
据
?
−
>
采
集
人
站
在
摄
像
头
前
的
图
片
和
身
份
i
d
灰
度
o
r
彩
色
?
−
>
彩
色
,
例
如
晒
黑
后
的
人
还
要
正
确
识
别
图
像
分
辨
率
怎
么
选
择
?
−
>
400
×
400
,
区
分
起
来
比
黑
夜
白
天
更
难
,
需
要
更
多
细
节
什
么
网
络
结
构
?
−
>
将
图
片
编
码
成
v
e
c
t
o
r
,
比
较
两
张
图
的
v
e
c
t
o
r
判
断
是
否
是
同
一
个
人
为
什
么
不
用
o
n
e
−
h
o
t
?
−
>
o
n
e
−
h
o
t
每
个
点
表
示
一
个
人
,
那
每
年
开
学
都
要
重
新
训
练
!
n
o
损
失
函
数
?
−
>
L
=
∣
A
−
P
∣
−
∣
A
−
N
∣
+
α
−
>
A
锚
点
,
P
正
样
本
,
N
负
样
本
,
α
保
证
网
络
不
是
去
学
n
u
l
l
−
>
换
种
I
n
i
t
i
a
l
i
z
a
t
i
o
n
方
案
可
以
避
免
α
(
M
a
r
g
i
n
)
吗
?
−
>
参
考
F
a
c
e
N
e
t
理
解
\begin{aligned} 输入数据?&->采集人站在摄像头前的图片和身份id\\ 灰度or彩色?&->彩色,例如晒黑后的人还要正确识别\\ 图像分辨率怎么选择?&->400\times400,区分起来比黑夜白天更难,需要更多细节\\ 什么网络结构?&->将图片编码成vector,比较两张图的vector判断是否是同一个人\\ 为什么不用one-hot?&->one-hot每个点表示一个人,那每年开学都要重新训练!no\\ 损失函数?&->L=|A-P|-|A-N|+\alpha\\ &->A锚点,P正样本,N负样本, \alpha保证网络不是去学null\\ &->换种\colorbox{aqua}{$Initialization$}方案可以避免\alpha(Margin)吗?\\ &->参考\colorbox{aqua}{$FaceNet$}理解 \end{aligned}
输入数据?灰度or彩色?图像分辨率怎么选择?什么网络结构?为什么不用one−hot?损失函数?−>采集人站在摄像头前的图片和身份id−>彩色,例如晒黑后的人还要正确识别−>400×400,区分起来比黑夜白天更难,需要更多细节−>将图片编码成vector,比较两张图的vector判断是否是同一个人−>one−hot每个点表示一个人,那每年开学都要重新训练!no−>L=∣A−P∣−∣A−N∣+α−>A锚点,P正样本,N负样本,α保证网络不是去学null−>换种Initialization方案可以避免α(Margin)吗?−>参考FaceNet理解
1.3 人脸Recognition
跟上个例子的区别是,不再是一对一的比较,而是一对多的比较;
如果跟上个例子用相同的算法,那么每次预测都要和整个数据库中所有人对比;
->适用 K-Nearest Neighbors
又一个例子,在手机摄像头里告诉这个人是你的什么亲戚;
->适用 K-Means
1.4 艺术生成 Neural Style Transfer
给你一幅图,要求美化它。
什么叫美?你对美的定义,是美的一种风格。
什
么
网
络
结
构
?
−
>
编
码
得
到
C
o
n
t
e
n
t
,
G
r
a
m
矩
阵
得
到
S
t
y
l
e
损
失
函
数
?
−
>
L
=
∣
S
t
y
l
e
S
−
S
t
y
l
e
G
∣
+
∣
C
o
n
t
e
n
t
C
−
C
o
n
t
e
n
t
G
∣
+
α
−
>
S
风
格
图
,
C
测
试
图
,
G
生
成
图
怎
么
初
始
化
?
−
>
不
必
是
白
噪
声
,
也
可
以
是
C
图
\begin{aligned} 什么网络结构?&->编码得到Content,\colorbox{aqua}{$Gram$}矩阵得到Style\\ 损失函数?&->L=|Style_S-Style_G|\colorbox{aqua}{$~+~$}|Content_C-Content_G|+\alpha\\ &->S风格图,C测试图,G生成图\\ 怎么初始化?&->不必是白噪声,也可以是C图 \end{aligned}
什么网络结构?损失函数?怎么初始化?−>编码得到Content,Gram矩阵得到Style−>L=∣StyleS−StyleG∣ + ∣ContentC−ContentG∣+α−>S风格图,C测试图,G生成图−>不必是白噪声,也可以是C图
非常注意,这里不再是通过最小化L来学习参数,而是在学习图!
缺点,没想生成一个图像,必须重新训练!
1.5 音频关键字检测
在一段10s的录音中,监测某个词(Trigger word / Wake word / Activate word,例如“小爱同学”);
收
集
什
么
数
据
?
−
>
不
同
人
不
同
口
音
的
10
s
话
,
每
个
人
音
色
不
同
,
分
布
尽
量
均
衡
(
男
女
老
少
)
采
样
率
?
−
>
经
验
:
看
人
类
说
多
快
能
分
清
怎
么
标
记
?
−
>
经
验
:
看
人
类
怎
么
能
找
出
标
记
的
。
−
>
不
再
是
简
单
的
0
/
1
(
需
要
很
多
数
据
)
,
而
是
在
10
s
每
隔
一
小
段
时
间
标
记
0
/
1
L
a
s
t
A
c
t
i
v
a
t
i
o
n
?
−
>
用
s
e
q
u
e
n
t
i
a
l
s
i
g
m
o
i
d
网
络
结
构
?
−
>
R
N
N
损
失
函
数
?
−
>
s
e
q
u
e
n
t
i
a
l
交
叉
熵
\begin{aligned} 收集什么数据?&->不同人不同口音的10s话,每个人音色不同,分布尽量均衡(男女老少)\\ 采样率?&->经验:看人类说多快能分清\\ 怎么标记?&->经验:看人类怎么能找出标记的。\\ &->不再是简单的0/1(需要很多数据),而是在10s每隔一小段时间标记0/1\\ Last~Activation?&->用sequential~sigmoid\\ 网络结构?&->RNN\\ 损失函数?&->sequential交叉熵\\ \end{aligned}
收集什么数据?采样率?怎么标记?Last Activation?网络结构?损失函数?−>不同人不同口音的10s话,每个人音色不同,分布尽量均衡(男女老少)−>经验:看人类说多快能分清−>经验:看人类怎么能找出标记的。−>不再是简单的0/1(需要很多数据),而是在10s每隔一小段时间标记0/1−>用sequential sigmoid−>RNN−>sequential交叉熵
1.6 项目成功的关键是什么
-
数据+标签的收集策略
programmatic generation of samples and automated labeling -
找网络结构+超参调优
找专家(问题领域的专家,或者AI领域的专家),而不是试来试去随机浪费时间
上图是目标检测任务的Loss,根号是想惩罚小目标的边界;
2. Full-cycle DL projects
- Select problem
- Get data
- Design model
- Train model
- Test model
- Deploy
- Maintain
2.1 项目成功的关键
- 兴趣
- 数据
- 领域知识
- utility
- 可行性
2.2 获取数据
- 工程量估计
- 如何收集数据
以设计一个唤醒软件为例:
- 先在1-2天手动搜集一点数据,启动项目;项目开始之前,很难想到难点在哪;
- 选择并训练网络,评估获取反馈
- 快速迭代
建议:为每次实验,keep clear notes on experiments on.
2.3 部署
如果追求性能,可能会选择大型网络进行训练;
但是边端设备,计算性能不高,因此要更节省资源;
如果想把计算部署到云端,要考虑网络延迟,这样体验不好;
以下面的模型为例:
audio->VAD->large NN->0/1
VAD, voice activity detection
2.3.1 VAD模块
VAD模块有两种做法,你会怎么选?
- Non-ML, voice > ϵ > \epsilon >ϵ
- Train small NN
利弊解释:
- 方案1,简单快速,窃窃私语、噪音背景误入
- 方案2, 稍慢
实际上,建议先选择方案1,快速实现并部署,发现不足以解决问题再替换为方案2.
但是,选择方案1的另一个关键原因是数据在部署中会发生变化,例如你在斯坦福训练的挺好,但是实际产品被卖到中东。Data change:
- 新口音
- 不同的背景音
- 新麦克风
方案1反而因为参数只有一个 ϵ \epsilon ϵ,而更加 健壮 ;
2.3.2 云端部署更易于维护吗?
如果不考虑隐私问题,即使用户的设备没有被激活,你也能收集到用户的音频数据,你就能分析为什么网络不好用了,就可以在云端重新训练,以适应新环境。
3. 攻击NN
这节需要理解3个概念:
- Attacking a network with adversarial examples
- Defenses against adversarial examples
- Why are neural networks vulnerable to adversarial examples?
两篇开山大作:
- intriguing properties of neural networks
- explaining and harnessing adversarial examples
3.1 生成对抗样本
创造一个并不是狗但网络认为它是狗的图。
这个问题跟风格生成有点像,我们的目标是学习图像,而不是学习网络参数。
损
失
函
数
?
−
>
L
=
1
2
∥
y
^
(
W
,
b
,
x
)
−
y
d
o
g
∥
2
2
需
要
限
制
x
必
须
不
真
的
是
狗
吗
?
−
>
真
实
世
界
的
图
像
只
占
可
能
的
R
G
B
空
间
的
很
小
一
部
分
,
所
以
大
概
率
x
不
会
是
真
的
危
险
吗
?
−
>
分
错
真
实
世
界
的
图
像
才
危
险
(
例
如
,
自
动
驾
驶
中
停
车
标
志
,
网
络
中
的
暴
力
图
片
,
没
被
认
出
)
损
失
函
数
?
−
>
L
=
1
2
∥
y
^
(
W
,
b
,
x
)
−
y
d
o
g
∥
2
2
+
λ
∥
x
−
x
c
a
t
∥
2
2
初
始
化
?
−
>
用
你
想
假
装
的
猫
的
图
像
,
比
白
噪
声
要
更
快
\begin{aligned} 损失函数?&->L=\frac{1}{2}\|\hat{y}(W,b,x)-y_{dog}\|_2^2\\ 需要限制x必须不真的是狗吗?&->真实世界的图像只占可能的RGB空间的很小一部分,所以大概率x不会是真的\\ 危险吗?&->分错真实世界的图像才危险(例如,自动驾驶中停车标志,网络中的暴力图片,没被认出)\\ 损失函数?&->L=\frac{1}{2}\|\hat{y}(W,b,x)-y_{dog}\|_2^2+\lambda\|x-x_{cat}\|_2^2\\ 初始化?&->用你想假装的猫的图像,比白噪声要更快 \end{aligned}
损失函数?需要限制x必须不真的是狗吗?危险吗?损失函数?初始化?−>L=21∥y^(W,b,x)−ydog∥22−>真实世界的图像只占可能的RGB空间的很小一部分,所以大概率x不会是真的−>分错真实世界的图像才危险(例如,自动驾驶中停车标志,网络中的暴力图片,没被认出)−>L=21∥y^(W,b,x)−ydog∥22+λ∥x−xcat∥22−>用你想假装的猫的图像,比白噪声要更快
3.2 防御对抗样本
由上面两种损失函数可知,攻击的类型有:
- Non-targeted attack
- Targeted attack
解决方案:
- 在NN前面增加一个SafetyNet,用于区分图像是否伪造
缺点:别人也可以新加个欺骗网络,先骗过SafetyNet - Train on correctly labelled adversarial examples
缺点:训练成本很高,也未必能推广到其他对抗样本 - 训练普通样本的同时训练对抗样本
L n e w = L ( W , b , x , y ) + λ L ( W , b , x a d v , y ) L_{new}=L(W,b,x,y)+\lambda L(W,b,x_{adv},y) Lnew=L(W,b,x,y)+λL(W,b,xadv,y) (Adversarial training)
缺点:每次来一个x,都要迭代算出一个 x a d v x_{adv} xadv,计算成本很高
L n e w = L ( W , b , x , y ) + λ ∥ f ( x ; W , b ) − f ( x a d v ; W , b ) ∥ 2 2 L_{new}=L(W,b,x,y)+\lambda \|f(x;W,b)-f(x_{adv};W,b)\|_2^2 Lnew=L(W,b,x,y)+λ∥f(x;W,b)−f(xadv;W,b)∥22 (Adversarial logit pairing)
3.3 为什么NN容易被攻击?
Ian Goodfellow(GAN之父)发paper申请,虽然大部分人认为NN中的非线性层和过拟合导致易受攻击,但是,实际上是线性部分导致。
以线性回归为例:
y
^
=
W
T
x
+
b
∂
y
∂
x
=
W
,
b
=
0
x
∗
=
x
+
ϵ
W
y
∗
^
=
W
T
(
x
+
ϵ
W
)
=
y
^
+
ϵ
∥
W
∥
2
\begin{aligned} \hat{y}&=W^Tx+b\\ \frac{\partial y}{\partial x}&=W, b = 0\\ x^*&=x+\epsilon W\\ \hat{y^*}&=W^T(x+\epsilon W) = \hat{y} + \epsilon\|W\|^2 \end{aligned}
y^∂x∂yx∗y∗^=WTx+b=W,b=0=x+ϵW=WT(x+ϵW)=y^+ϵ∥W∥2
因为
∥
W
∥
2
\|W\|^2
∥W∥2总是大于0,所以总是将
y
∗
^
\hat{y^*}
y∗^向正的方向推动;
Insights:
- 如果sign(W)很大,则 x ∗ x^* x∗不会很接近 x x x;
- 随着x维度数的增加, + ϵ s i g n ( W ) + \epsilon sign(W) +ϵsign(W)对于 y ∗ ^ \hat{y^*} y∗^的影响也越大;
- 其他NN类似,因为链式法则;
4. GAN
Generative Adversarial Networks
对抗生成网络中的“对抗”,不同于Attacking NNs中的对抗样本的“对抗”。
4.1 动机
NN真的理解数据吗?
- 动机:赋予计算机理解人类世界的能力;
- 目标:收集大量数据,训练网络以从0开始生成相似的数据;
- 直觉:模型的参数 ≪ \ll ≪数据总量,网络没有足够数据来过度拟合所有内容;
- 概率分布:从真实数据分布中采样,从生成分布中采样,估计两个分布的相似程度;
4.2 G/D游戏
将生成器G生成的假图和真实世界的真图交替传给判别器D,要求能被分辨;
D很好训练,但我们实际想要的是G;
4.3 训练GAN
4.3.1 损失函数的Modification
训练过程中,要最小化:
- D的cost:D应该能把真实数据判为1,把生成数据判为0;
J ( D ) = − 1 m r e a l ∑ i = 1 m r e a l y r e a l ( i ) ⋅ l o g ( D ( x ( i ) ) ) − 1 m g e n ∑ i = 1 m g e n ( 1 − y g e n ( i ) ) ⋅ l o g ( 1 − D ( G ( z ( i ) ) ) ) \begin{aligned} J^{(D)}=&-\frac{1}{m_{real}}\sum_{i=1}^{m_{real}}y_{real}^{(i)}\cdot log(D(x^{(i)}))\\ &-\frac{1}{m_{gen}}\sum_{i=1}^{m_{gen}}(1-y_{gen}^{(i)})\cdot log(1-D(G(z^{(i)}))) \end{aligned} J(D)=−mreal1i=1∑mrealyreal(i)⋅log(D(x(i)))−mgen1i=1∑mgen(1−ygen(i))⋅log(1−D(G(z(i)))) - G的cost:G应该能骗过D让D认为生成数据是1;
J ( G ) = − J ( D ) = 1 m g e n ∑ i = 1 m g e n l o g ( 1 − D ( G ( z ( i ) ) ) ) J^{(G)}=-J^{(D)}=\frac{1}{m_{gen}}\sum_{i=1}^{m_{gen}}log(1-D(G(z^{(i)}))) J(G)=−J(D)=mgen1i=1∑mgenlog(1−D(G(z(i))))
网络训练的初始阶段,G很差,D很容易发现造假,D(G(z))趋于0,这附近黄色的饱和损失的梯度很小,网络收敛很慢。
m i n [ l o g ( 1 − x ) ] ⇔ m a x [ l o g ( x ) ] ⇔ m i n [ − l o g ( x ) ] ⇓ J ( G ) = − 1 m g e n ∑ i = 1 m g e n l o g ( D ( G ( z ( i ) ) ) ) \begin{aligned} min[log(1-x)]&\hArr max[log(x)] \hArr min[-log(x)]\\ &\Downarrow\\ J^{(G)}&=-\frac{1}{m_{gen}}\sum_{i=1}^{m_{gen}}log(D(G(z^{(i)})))\\ \end{aligned} min[log(1−x)]J(G)⇔max[log(x)]⇔min[−log(x)]⇓=−mgen1i=1∑mgenlog(D(G(z(i))))
做了这样的等价转换后,G的cost就可以较快收敛了;
下面这篇文章总结了截至到2018年的GAN几种变体的损失函数:
Are GANs Created Equal? A Large-Scale Study
4.3.2 G的上界
D比G更容易训练,但是随着D的进步G也需要进步,如果D不改进,G就没法改进;
换言之,G能达到的上线取决于D的能力;
因此,我们应该多训练D,如下,或者两者采用不同的学习率,等:
for num_iterations:
for k_iterations:
update D
update G
4.3.3 Virtual Batchnorm
4.3.4 One-sided lable smoothing
4.4 有趣的应用
编码的隐式空间的运算,能对应到图像空间;
墨镜男code-普通男code+普通女code===G===>墨镜女
Unsupervised representation learning with deep convolutional Generative adversarial networks
StackGAN++ 2017可以生成以假乱真的假图像;
根据地图图像,生成卫星图;
Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks
如何将图像中的马,用GAN替换成斑马?
数据怎么组织?
- 收集数据,马,站在同样位置、同样角度的斑马?不切实际
- 不需要成对,也不需要限制背景;
pix2pix 该网络可以将简笔画翻译成水彩画
超分辨率重建 Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network
患者隐私保护 Privacy-preserving generative deep neural networks support clinical data sharing;
4.5 如何评估GAN
人类注释;
Inception Score (IS);