【cs230】吴恩达Deep Learning-1/3

0. 课程计划

课程地址
2018video地址
2020slide地址
吴恩达书籍Machine Learning Yearning地址

本系列相关链接
【cs229】吴恩达MachineLearning-1/2

共计10节课,是CS229的后续课程,视频只有2018年的,但是讲义有2020年的。

目的是深入掌握基础知识点,笔记不是重复翻译,而是记录自己的疑问并及时回答自己。

(cs229我是从coursera上看的,也许不是斯坦福的最新video,把所有课程学完之后可以再撸最新更新,但不是现在。)

课程目标:

  1. 成为DL算法专家(深厚的基础、最新的技术)
  2. 解决问题

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} onehotLast 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 better64×64>1.2.3.>okCNN>

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} oronehot>id>>400×400>vectorvector>onehotno>L=APAN+α>APN,α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} >ContentGramStyle>L=StyleSStyleG + ContentCContentG+α>SCG>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(10s0/1>sequential sigmoid>RNN>sequential

1.6 项目成功的关键是什么

  1. 数据+标签的收集策略
    programmatic generation of samples and automated labeling

  2. 找网络结构+超参调优
    找专家(问题领域的专家,或者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. 先在1-2天手动搜集一点数据,启动项目;项目开始之前,很难想到难点在哪;
  2. 选择并训练网络,评估获取反馈
  3. 快速迭代

建议:为每次实验,keep clear notes on experiments on.

2.3 部署

如果追求性能,可能会选择大型网络进行训练;
但是边端设备,计算性能不高,因此要更节省资源;
如果想把计算部署到云端,要考虑网络延迟,这样体验不好;

以下面的模型为例:
audio->VAD->large NN->0/1
VAD, voice activity detection

2.3.1 VAD模块

VAD模块有两种做法,你会怎么选?

  1. Non-ML, voice > ϵ > \epsilon >ϵ
  2. 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=21y^(W,b,x)ydog22>RGBx>>L=21y^(W,b,x)ydog22+λxxcat22>

3.2 防御对抗样本

由上面两种损失函数可知,攻击的类型有:

  1. Non-targeted attack
  2. Targeted attack

解决方案:

  1. 在NN前面增加一个SafetyNet,用于区分图像是否伪造
    缺点:别人也可以新加个欺骗网络,先骗过SafetyNet
  2. Train on correctly labelled adversarial examples
    缺点:训练成本很高,也未必能推广到其他对抗样本
  3. 训练普通样本的同时训练对抗样本
    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^xyxy^=WTx+b=W,b=0=x+ϵW=WT(x+ϵW)=y^+ϵW2
因为 ∥ W ∥ 2 \|W\|^2 W2总是大于0,所以总是将 y ∗ ^ \hat{y^*} y^向正的方向推动;

Insights:

  1. 如果sign(W)很大,则 x ∗ x^* x不会很接近 x x x;
  2. 随着x维度数的增加, + ϵ s i g n ( W ) + \epsilon sign(W) +ϵsign(W)对于 y ∗ ^ \hat{y^*} y^的影响也越大;
  3. 其他NN类似,因为链式法则;

4. GAN

Generative Adversarial Networks
对抗生成网络中的“对抗”,不同于Attacking NNs中的对抗样本的“对抗”。

4.1 动机

NN真的理解数据吗?

  1. 动机:赋予计算机理解人类世界的能力;
  2. 目标:收集大量数据,训练网络以从0开始生成相似的数据;
  3. 直觉:模型的参数 ≪ \ll 数据总量,网络没有足够数据来过度拟合所有内容;
  4. 概率分布:从真实数据分布中采样,从生成分布中采样,估计两个分布的相似程度;

4.2 G/D游戏

将生成器G生成的假图和真实世界的真图交替传给判别器D,要求能被分辨;
D很好训练,但我们实际想要的是G;
在这里插入图片描述

4.3 训练GAN

4.3.1 损失函数的Modification

训练过程中,要最小化:

  1. 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=1mrealyreal(i)log(D(x(i)))mgen1i=1mgen(1ygen(i))log(1D(G(z(i))))
  2. 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=1mgenlog(1D(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(1x)]J(G)max[log(x)]min[log(x)]=mgen1i=1mgenlog(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替换成斑马?
数据怎么组织?

  1. 收集数据,马,站在同样位置、同样角度的斑马?不切实际
  2. 不需要成对,也不需要限制背景;

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);

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值