吴恩达深度学习
- 神经网络
- 浅层神经网络
- activation function
- sigmoid
- tanh
- ReLU
- Leaky ReLU
- 随机初始化
- He initialization
- Xavier initialization
- 正则化
- L2范数
- Dropout
- Data augmentation
- Early stopping
- 归一化
- 优化算法
- 指数移动加权平均
- Momentum
- RMSprop
- Adam
- AdaGrad
- Nesterov
- 超参数调优
- Batch Normalization
- SoftMax
- ML工程化
- CNN
- 边缘检测
- Padding
- Stride
- 三维卷积
- Pooling(下采样)
- 原理
- 反向传播
- 经典网络
- LeNet-5
- AlexNet
- VGG-16
- ResNet
- Inception
- 目标检测
- 目标定位
- 卷积网络的滑动窗口实现
- YOLO
- 交并比IoU
- Non-max suppression
- Anchor Boxes
- R-CNN
- Fast R-CNN
- Faster R-CNN
- 人脸识别
- Siamese network
- Triplet
- 风格迁移
- 1D和3D卷积
- RNN
- LSTM
- GRU
- Word embedding
- Word2Vec
- Negative sampleing
- GloVe
- t-SNE
- Seq2Seq
- Beam search
- CTC
神经网络
浅层神经网络
activation function
sigmoid
tanh
在隐藏层使用,可以使样本均值为0
ReLU
rectify linear unit, 收敛更快
Leaky ReLU
解决负数导数为0的问题
随机初始化
He initialization
Xavier initialization
正则化
L2范数
损失函数后面加上L2范数
Dropout
Inverted Dropout
通过p概率将部分神经元置0后,还要将当前层的输出除以1-p,以保证损失函数与没有使用dropout基本一致
Data augmentation
flip, color distortion, gaussian noise
Early stopping
Early stopping便是一种提前结束训练的策略用来防止过拟合。 一般的做法是记录到目前为止最好的 validation accuracy,当连续10个Epoch没有达到最佳 accuracy时,则可以认为 accuracy不再提高了。
归一化
则,
由于所有特征的均值为0,方差为1,所以空间上的点会呈一个超球体状分布的原点附近
优化算法
指数移动加权平均
- 一次移动平均法: 拿前k个数做算术平均,做为下一次的预测值
- 加权移动平均法: 拿前k个数做加权平均,做为下一次的预测值
- 指数移动加权平均
Momentum
每个epoch更新一次, 第一个epoch,为0 利用指数移动加权平均,让曲线更加平滑,从而加速收敛
RMSprop
Root mean sqrt prop
Adam
Adative momentum estimation 相当于学习率自适应。 当点在平坡时,梯度小,则下一轮走得快一点; 当点在斜坡时,梯度大,则下一轮走得慢一点;
AdaGrad
学习率能自适应,慢慢趋于0
Nesterov
NAG, Nesterov Accelerated Gradient
用未来的梯度方向
超参数调优
- 随机在一定范围内选取某些值,观察效果,再不断缩小范围
Batch Normalization
和也要做为参数用于训练,在神经网络中加了BN层
如果等于方差, 等于均值,则变换回了原来的. 加入最后一步,是为了还原原来的结构,因为和也变成了要训练的参数,理论上,如果准确率100%,则训练结果等于方差, 等于均值。
测试集时,和是通过指数移动平均方法将之前训练集保存下来的每个和做一个估计,用于计算测试时的和
SoftMax
ML工程化
- 训练集和测试集必须要服从同一分布
- 当要额外增加数据时,把增加的所有数据放到训练集中,而验证集和测试集不要变化,这样才能把模型应用到目标上面去
- pre-training: 迁移到新数据集时,不改变前面层的参数,只训练后面层的参数
- fine-tunning: 迁移到新数据集时,整个网络的参数都需要重新训练
- 多任务学习: 一个网络解决多个任务,比如检测路灯,检测行人等,输出一个向量,每一个value为1或0,第一行为1表示有路灯,第二行为1表示有等人
CNN
边缘检测
用一个kernel或者叫filter去做卷积运算,比如: 是一个垂直边缘检测filter
Sober filter:
Scharr filter
CNN卷积层其实就是让神经网络自己去学习filter,而不是人工指定。
Padding
Valid padding: no padding 一张nxn的图片,经过fxf的卷积操作,结果为(n-f+1)x(n-f+1)
Same padding: 在图片周围补p个像素,目的是为了让nxn的图片,filter之后还是nxn. 这个时候结果为(n+2p-f+1)x(n+2p-f+1), 由 得
Stride
卷积核移动的步长 公式变为: s为步长
三维卷积
HxWxC的图片,卷积核为fxfxC, 结果为 , 假设
Pooling(下采样)
- Max Pooling: 同样使用filter, 但是这次的运算为Max运算,可达到降维的目的
- Average Pooling, 求平均值
原理
- 参数共享,实质上,设卷积核的大小为3x3=9,共用了6个卷积核,则只需要54个参数,这些参数是由前面的输入单元到输出单元共享的参数,如果不这样做,参数个数是巨大的。思想的源头是,边缘检测,一个filter可以检测所有的像素点,不需要为每个像素点设置单独的参数
- 稀疏连接:下一层的神经元只与前面的部分神经元连接
反向传播
TODO
经典网络
LeNet-5
- 5x5 conv, 6个
- 2x2, stride=2 average pooling
- 5x5 conv, 16个
- 2x2, stride=2 average pooling
- fc, 120
- fc, 84
- softmax
AlexNet
- 11x11 stride=4 conv, 96个
- 3x3, stride=3 max pooling
- 5x5, same conv, 256个
- 3x3, stride=3 max pooling
- 3x3, same conv, 384个
- 3x3, same conv, 384个
- 3x3, same conv, 256个
- 3x3, stride=2 max pooling
- fc, 4096
- fc, 4096
- softmax
VGG-16
- 3x3, same cov, 64个
- 3x3, same cov, 64个
- 2x2, stride=2, max pooling
- 3x3, same cov, 128个
- 3x3, same cov, 128个
- 2x2, stride=2, max pooling
- 3x3, same cov, 256个
- 3x3, same cov, 256个
- 3x3, same cov, 256个
- 2x2, stride=2, max pooling
- 3x3, same cov, 512个
- 3x3, same cov, 512个
- 3x3, same cov, 512个
- 2x2, stride=2, max pooling
- 3x3, same cov, 512个
- 3x3, same cov, 512个
- 3x3, same cov, 512个
- 2x2, stride=2, max pooling
- fc, 4096
- fc, 4096
- softmax
ResNet
当出现梯度消失时,为0,则, 由于g一般为relu,也即
Inception
将大网络分成多个inception, 每个inception包含不同大小的卷积核,考虑更多全局信息。
目标检测
目标定位
label: 其中,为1表示检测到物体,分别为目标的坐标,高度和宽度。表示类别
卷积网络的滑动窗口实现
TODO
YOLO
You only look once
交并比IoU
Intersection over Union
将预测窗口与实际窗口的交集除以并集,大于0.5表示可以接受
Non-max suppression
- 保留概率最大的那个窗口作为预测值
- 计算其他窗口与预测值的IoU, 将小于某个值的窗口丢弃
Anchor Boxes
解决同一个窗口里面有多个目标的情况,将输出label翻n倍,n为目标个数
R-CNN
Region of CNN 去掉在没有目标的窗口上的无意义扫描. 通过图像分割思想,只检测有色块的区域。
Fast R-CNN
用卷积滑动窗口的实现加快了速度。
Faster R-CNN
用卷积神经网络来进行图像分割,以检测出来色块
人脸识别
Siamese network
孪生网络, 属于小样本学习的一种。训练一个卷积神经网络f, 将2个同类图片经过f, 得到特征向量x1, x2, 将|x1 - x2|作为输入经过一个MLP,以sigmoid输出,由于是同类图片,期望结果接近1,通过反向传播不断训练,直到f能达到同类图片结果接近1,不同类图片结果接近0为止。
Triplet
类似的还有Triplet损失,需要输入3张图片,一个anchor, 一个positive, 一个negative
为anchor到positive的距离,为anchor到negative的距离。若, 则要求
风格迁移
损失函数 原始图片C, 风格图片S, 生成的图片G 表明,内容上要和原始图片尽可能一致,风格上要和风格图片尽可能一致
对于 , 需要分析卷积网络隐藏层里面是哪一层控制内容,取这一层的输出,和分别为C和G的输出,则
对于风格损失函数,输入图像的feature map为[ ch, h, w]。我们经过flatten(即是将h*w进行平铺成一维向量)和矩阵转置操作,可以变形为[ ch, h*w]和[ h*w, ch]的矩阵。再对两个作内积得到Gram Matrices。 (蓝色条表示每个通道flatten后特征点,最后得到 [ch * ch]的G矩阵)
目前是减少2个G矩阵的相似度,即使用2个矩阵对应元素的均方误差来表示。
1D和3D卷积
1D: 心电图 3D: CT影像,视频
RNN
RNN只考虑前面的序列对后面的序列有影响,并没有考虑反过来的。所以才出现了BiDirection RNN
- 梯度爆炸的解决办法: 梯度修剪,即当梯度大于某个值时,对整体梯度做一个scale
LSTM
Long short term memory 解决梯度消失的问题
u: update gate f: forget gate o: output gate
GRU
Gated Recurrent Unit(GRU) 解决梯度消失的问题
r: reset gate, u: update gate
最后的表达式也是使用了指数移动平均。
Word embedding
通过学习词语之间的相关性,在已经有label的样例中,可以更好的泛化那些未见过的序列,这是通过相关性来实现的。 Tom likes cat. 假设已经训练出来Tom是人名,当模型遇到Alex likes dog.时,由于 cat和dog很类似,所以可以预测出来Alex大概率是人名。
可以用于推导近义词,反义词。类比推理
训练方法是无监督训练,构建一个神经网络,对于相似的单词,可以得到相同的输出,则神经网络的隐藏层就包含了word embedding的信息,有部分单词的相关性,从而无需人工先验指定。
Word2Vec
用一个没有激活函数的神经网络来训练出来的参数,这些参数就是映射到低维空间的work embedding
如果是用一个词语作为输入,来预测它周围的上下文,那这个模型叫做『Skip-gram 模型』 而如果是拿一个词语的上下文作为输入,来预测这个词语本身,则是 『CBOW 模型』
Negative sampleing
使用一个正例,多个负例,直接用Logistic训练分类器
GloVe
Global vectors for word representation TODO
t-SNE
SNE(Stochastic Neighbor Embedding,随机近邻嵌入), 流形学习的一种
Seq2Seq
Encoder-Decoder network Encoder输入某种语言的句子,decoder输出另外一种语言
Beam search
通过设置beam search width, 让神经网络不仅仅看下一个单词与当前单词的关系,也看前几个单词的关系
CTC
The acoustic-to-word model