台湾大学李宏毅老师的机器学习课程是一份非常好的ML/DL入门资料,李宏毅老师将课程录像上传到了YouTube,地址:NTUEE ML 2016 。
这篇文章是学习本课程第10-12课所做的笔记和自己的理解。
CNN的参数比全连接神经网络少得多,为什么CNN只用较少的参数就可以用于处理图像呢?这是因为图像具有以下三点特征:
1、一些模式比整张图片小得多,例如“鸟喙”就比整张图片小得多;
2、同样的模式可能出现在图像的不同区域,例如“鸟喙”可能出现在图片的左上方也可能出现在图像的中间;
3、对图像的降采样不会改变图像中的物体。
CNN的卷积层的设计对应着前两点,池化层的设计对应着第三点。
理解卷积操作的动图
卷积是一种神经网络的连接方式:
Shared weights: 同色的weight相等。
max pooling和flatten都很简单。
上例中第二个卷积层有50个11x11的filter,它们的参数是学出来的,设第k个filter的活跃度为 ak ,固定参数,用梯度上升法求使 ak 最大的input image。
得到的结果是,使各个filter活跃度最大的image是各种条纹。这层filter看的还是局部信息。
而使flatten后的FC层的filter活跃度最大的image,就显示出了各种轮廓,说明这些filter看的是整体信息。
固定参数,求input image,让output layer的各neuron的output最大,并没有得到期望中的数字图片,而是很杂乱的图像。(白色表示有墨水。)
对目标output加一个L1正则项,所得结果稍显数字轮廓。
Deep Dream 与 Deep Style 有着与之类似的思路。
Deep Dream: 将一张image作为CNN的输入,将CNN某个hidden layer的output(vector)拿出来,让其中正的更正、负的更负,把它作为新的image的target.
Deep Style:
左边CNN filter output代表内容,后边的CNN的filter output之间的correlation代表风格。
要找一张image,其content (filter output)像左,style (output correlation)像右。
阿尔法狗:棋盘作为image,有开篇所讲的前两个特点,但没有第三个特点,所以阿尔法狗没有pooling layer。
语音识别应用,CNN的filter只会在频谱的频率方向扫描,不会在时间方向扫描。
文本分类应用,CNN的filter只会在sentence matrix的时间方向扫描,不会在embedding dimension方向扫描。
所以,在具体场景应用CNN时,如何设计CNN的结构,需要考虑场景本身的性质特点。
在比较浅层网络与深层网络时,要让“矮胖”的网络和“高瘦”的网络的参数数目相等,这样比较才公平。
即便是在深层网络参数较少的情况下,深层网络也会比浅层网络表现好。
这是因为“深层”其实相当于“模组化”,第一个隐层是最基本的分类器,第二个隐层是用第一个隐层建造的分类器,以此类推。
浅层网络确实可以表示任意函数,但是使用深层结构更有效率。
好比逻辑门电路,用两层逻辑门就可以实现任何布尔函数,但是用多层结构更简单、需要的逻辑门更少。
神经网络也是如此,单隐层网络可以表示任何连续函数,但是多层结构表示起来更简单、需要的神经元更少,所以比较不容易overfitting,或只需较少的data。
而且,深层结构可以比较有效率地使用data。
1层hidden layer与3层hidden layer(相同数目的参数),3层的效果更好。
但理论上,3层可达到的效果,1层也能达到:要在1层learn的时候,target从真实label改为3层的output,这样1层的结果会接近3层的结果。
半监督学习的训练数据,有一部分是标注数据,有一部分是无标注数据。
Transductive learning和Inductive learning都可算是半监督学习,区别在于前者的无标注数据是测试数据(除去label),而后者的无标注数据不包括测试数据。实际中用哪种常取决于是否有测试集。
无标注数据的分布会让我们做出一些假设,半监督学习有没有用就取决于假设是否合理。
无标注数据有助于重新估计生成模型假设中的参数,从而影响决策边界。算法采用EM算法。
EM的每次(E步、M步)都让likelihood增加一点。
从标注数据得到模型 f∗ (用什么方法都可以),将模型 f∗ 用于无标注数据得到伪标签,将一部分无标注数据连同伪标签移入标注数据中(选择那些无标注数据是开放性的,可以给每个伪标签一个信度),重复训练、再次得到 f∗ ……
回归问题用self-training不影响 f∗ ,所以回归问题不能用self-training方法。
self-training类似于生成模型的半监督学习,区别在于:self-training是硬标签,而Semi-supervised Learning for Generative Model是软标签。
对神经网络来讲,用软标签是没有用的。用硬标签就相当于用Low-density Separation Assumption(强制属于某一类,非黑即白)。
假设特征的部分是不均匀的(在某些地方集中,某些地方分散),如果两个特征在高密度区域是相近的,那么二者的标签是相同的。
(两个“2”之间有各种2的变体,两个正侧面之间有45°侧面、正面等)
用聚类再标注的方法,可以,但是用像素做聚类结果不会很好,因为有的同类不像,有的异类相像。应该先用deep autoencoder抽feature,再做聚类。
也可以用图结构来表示高密度区域,图的建立与结果很关键。
定义 s(xi,xj) 的时候,如果 xi,xj 是图像,那么根据像素定义相似度结果应该不会好,用autoencoder抽feature比较好。
exp指数函数是必要的,可以带来比较好的performance,让距离稍远一点s就很小。
用基于图的方法需要data足够多,不然信息传不过去。
定义平滑度,将其作为损失函数中的正则项:
(计算smoothness不一定是在output算)
李宏毅机器学习课程笔记
李宏毅机器学习课程笔记1:Regression、Error、Gradient Descent
李宏毅机器学习课程笔记2:Classification、Logistic Regression、Brief Introduction of Deep Learning
李宏毅机器学习课程笔记3:Backpropagation、”Hello world” of Deep Learning、Tips for Training DNN
李宏毅机器学习课程笔记4:CNN、Why Deep、Semi-supervised
李宏毅机器学习课程笔记5:Unsupervised Learning - Linear Methods、Word Embedding、Neighbor Embedding
李宏毅机器学习课程笔记6:Unsupervised Learning - Auto-encoder、PixelRNN、VAE、GAN
李宏毅机器学习课程笔记7:Transfer Learning、SVM、Structured Learning - Introduction
李宏毅机器学习课程笔记8:Structured Learning - Linear Model、Structured SVM、Sequence Labeling
李宏毅机器学习课程笔记9:Recurrent Neural Network
李宏毅机器学习课程笔记10:Ensemble、Deep Reinforcement Learning