1.机器学习概论
为解决不同的问题、完成不同的任务,需要找到不同的函数,那机器学习能找到哪些函数呢?
1.回归(Regression):输出是一个连续的数值、标量,比如PM2.5预测。
2.分类(Classification):输出是一个离散的值。
3.二分类(Binary Classification):的输出就是0或1、Yes或No、…,比如文本情感分析的输出可以是正面和负面。
4.多分类(Multi-Category Classification):的输出就是[1,2,3,…,N],比如图像分类里判断一张图片是猫还是狗还是杯子。
5.生成(Generation):很多教科书把机器学习划分为回归问题和分类问题,但其实不止这两种问题,还有其它问题, 生成(Generation)指让机器学习如何创造/生成,比如生成文本、图片等。
监督学习(Supervised Learning)
可以把有监督学习中的“监督”理解为“标签(Label)”,即数据集中不仅包括特征还包括标签。
有了标签,我们就可以评价一个函数的好坏,进而优化这个函数。
使用Loss判断函数的好坏,Loss越小,函数越好。
强化学习(Reinforcement Learning)
原始的AlpahGo是先通过有监督学习优化到一定程度,然后用强化学习继续优化。
新版本的AlphaGo是完全通过强化学习实现的,优于原始的AlphaGo。
无监督学习(Unsupervised Learning)
只给机器提供数据特征,但不提供数据标签。
监督学习VS强化学习
监督学习:函数的输入(数据特征)就是棋盘状态,函数的输出(数据标签)就是下一步落棋的位置。此时,我们需要为机器提供的数据就类似棋谱(如果现在棋局是这样,那下一步怎么落棋最好),但其实人类不一定知道怎么落棋最好。
强化学习:让机器跟自己、别人下棋,把结果(赢或输)作为Reward,引导机器学习如何下棋。如果它赢了,那它就知道这一盘里有几步棋下得好,但不知道是哪几步;如果它输了,它就知道这一盘里有几步棋下得不好,但不知道是哪几步。
机器如何找出我们想找到的函数
1.给定函数形式/范围(模型)
比如假定函数是线性模型、神经网络等等。模型就是一个函数集,模型的参数确定以后,才得到一个函数。
2.找到更好的函数:
使用梯度下降(Gradient Descent),找到更好的函数。
机器学习的三个步骤
1.确定模型(Model)/函数集(Function Set)
2.确定如何评价函数的好坏
3.确定如何找到最好的函数
2.Regression
2.1线性回归模型
线性回归模型(Linear Regression Model)
如y=fx=ω∙x+b
y 是输出
y 是真实值/标签(label)
ω 是权重(weight)
b 是偏置(bias)
x 是输入(input),也可叫做特征(feature)
数据集中一般包含多个object,每个object一般包含多个component。此时,上标是object的索引,下标是component的索引。
损失函数(Loss Function)
如果不考虑模型的好坏,衡量一个函数的好坏,其实是衡量模型参数的好坏。
以线性模型为例,就是衡量参数和的好坏。如Lf=Lω,b=n=110(y-(b+ω*xn))2 , 把所有样本误差的平方和作为损失函数
输入:一个函数
输出: 多么地不好(how bad it is)。损失函数值越大,则这个函数越差、与数据集中内容越不相符。
梯度下降(Gradient Descent)
https://www.cnblogs.com/chouxianyu/p/14198053.html(Adagrad)
梯度下降可以优化损失函数的值,使其尽量小,即可找到最好(在数据集上拟合效果最好)的模型参数。
现在假设模型f 中只有一个参数ω ,则损失函数为Lf=L(ω) ,梯度下降算法如下(若模型有多个参数,按相同方法更新各参数)
1.初始化参数
随机选取一个ω0 (并不一定是随机选取),令ω=ω0 。
2.计算梯度
dLfdω|ω=ω0
如果小于0,此时ω 增大则L(f) 会减小;如果大于0,此时ω 减小则L(f) 会减小。
如果模型有多个参数,则计算损失函数在各个参数方向上的偏导数。
3.更新模型参数
ω1=ω0-lrdLfdω|ω=ω0
ω 的变化量取决于梯度和学习率(Learning Rate)的大小:梯度绝对值或学习率越大,则 ω 变化量越大。
如果模型有多个参数,则用上一步计算出的偏导数对应更新各参数。
4.重复第2步和第3步
经过多次参数更新/迭代(iteration),可以使损失函数的值达到局部最小(即局部最优,Local Optimal),但不一定是全局最优。
2.2如何选择模型,减少误差
模型选择(How to select model)
模型越复杂,一般其在训练集上的误差(Error)越小。
因为更复杂的模型(函数集)包含了更多的函数。比如二次模型包含了线性(一次)模型。
模型越复杂,其在测试集上的误差(Error)不一定越小。
因为模型过于复杂时,越容易被数据影响,可能导致过拟合。
误差(Error)
暂时称通过机器学习得到的函数为人工函数,它其实是对“上帝函数”的估计(Estimator),和“上帝函数”之间是有误差的。
误差来源于两方面:
一是Bias,二是Variance,需要权衡(trade-off)两者以使总误差最小。
如上图所示,Bias是指人工函数(的期望)和上帝函数之间的距离,Variance是指人工函数的离散程度(或者说是不稳定程度)。
如上图所示,横轴是模型的复杂程度(1次幂、2次幂、……),纵轴是误差大小。模型越复杂,Bias越小,Variance越大。
Variance
定义:使用相同模型在不同数据上拟合得到的函数是不同的,这些函数之间的离散程度就是Variance。
以射箭为例,Variance衡量的就是射得稳不稳。
模型越复杂,Variance越大。
因为模型越简单,越不容易被数据影响(对数据不敏感,感知数据变化的能力较差),那Variance就越小。
Bias
定义:使用相同模型在不同数据上拟合得到的函数是不同的,取这些函数的“期望”,该期望与“真理”的差距就是Bias。
以射箭为例,Bias衡量的就是射得准不准。
模型越简单,Bias越大。
因为模型就是个函数集(Function Set)。模型越简单,则其包含的函数就越少、包含“上帝函数”的几率就越小,甚至可能不包括上帝函数。
在函数集很小的情况下,即使是其中最好的函数,它与“上帝函数”的差距也还是很大的。
欠拟合:Bias越大 Variance越小
过拟合:Bias越小 Variance越大
2.3欠拟合与过拟合
欠拟合(Underfitting)
定义:Bias较大、Variance较小。
如果模型在训练集上的误差很大,则此时Bias是大的,情况为欠拟合。
处理:使用更复杂的模型,比如添加考虑更多维度的输入、把线性模型换成非线性模型。
过拟合(Overfitting)
定义:Bias较小、Variance较大。
如果模型在训练集上的误差很小,但是在测试集上的误差很大,则此时Variance是大的,情况为过拟合。
处理:
1.使用更复杂的数据集
比如添加数据(很有效,但不一定做得到)、数据增强等方法。
2.使用更简单的模型(不是根本方法)
可能是模型过于复杂导致了过拟合,因此可以简化模型缓解过拟合。
3.正则化(Regularization)
正则化可能会使Bias增大,所以需要调整正则化的参数。
如Lnew=Lold+λ(wi)2 ,其中λ 是一个常数。
加上正则项λ(wi)2 的目的是让函数参数的值尽可能地接近0,使函数变得更平滑。
平滑(Smooth)
定义:平滑是指输入变化影响输出变化的程度(输出对输入的敏感程度)。
假设输入变化,如果函数越不平滑,则输出变化程度越大。
函数参数越接近0,这个函数就越平滑(smooth)。
我们为什么喜欢一个平滑的函数?
适度平滑的函数可以缓解函数输入中包含的噪声对函数输出的影响。
如果输入中包含一些噪声/干扰(noise),那平滑函数的输出受输入中包含的噪声干扰的程度更小。
我们为什么不喜欢过于平滑的函数?
函数过于平滑,就无法有效地提取数据的特征,这不是我们想要的函数。
假设有一个极限平滑的函数,即该函数的输出不受输入的影响,那当然不是个好的函数。
e.g.:f(x)=0
2.4交叉验证
交叉验证(Cross Validation)
在机器学习中,通常不能将全部数据用于模型训练,否则将没有数据集可以用来评估模型。
The Validation Set Approach
定义:将数据集划分成训练集(Training Set)和测试集(Test Set)两部分。
缺点:依赖于训练集和测试集的划分方法,并且只用了部分数据进行模型的训练。
LOOCV(Leave One Out Cross Validation)
定义:假设数据集中有N个数据,取其中1个数据作为测试集,将剩下的N-1个数据作为训练集,这样重复N次就得到N个模型以及N个误差值,最终使用这N个误差值的平均值评估该模型。
优点:该方法不受训练集和测试集划分方法的影响,因为每个数据都单独做过测试集;同时该方法用了N-1个数据训练模型,也几乎用到了所有的数据,保证了模型的Bias更小。
缺点:该方法的缺点是计算量过大,是The Validation Set Approach耗时的N-1倍。
K折交叉验证(K-fold Cross Validation)
定义:该方法是LOOCV的折中,即将数据集分成K份。
如何选取K的值
K的选取是一个Bias和Variance的trade-off。一般选择K=5或10。
K越大,每次训练时训练集的数据量就越大,则Bias越小;但每次训练时的训练集之间的相关性越大(考虑最极端的情况K=N,也就是LOOCV,每次训练使用的数据几乎是一样的),这种大相关性会导致最终的误差具有更大的Variance。
4. Classification
4.1分类简介及其与回归的区别
分类模型应用案例(Classification Cases):
1. 手写文字识别(Handwritten Character Recognition)
输入:文字图片
输出:是哪一个汉字
2. 人脸识别(Face Recognition)
输入:面部图片
输出:是哪个人
不能将分类当成回归去做!!
假设有两个类别,其中类别1的标签为1,类别2的标签为-1,那0就是分界线,大于0就是类别1,小于0就是类别2。
回归模型会惩罚那些太正确的样本。如果结果远远大于1,它的分类应该是类别1还是类别2?这时为了降低整体误差,需要调整已经找到的回归函数,就会导致结果的不准确。
如图所示,当存在结果远大于1的样本时,为了迁就该类样本,回归函数将从绿线向蓝线转变,这会使结果的准确性降低
理想替代方案(Ideal Alternatives)
模型:可以根据特征判断类型,输入是特征,输出是类别
损失函数:预测错误的次数,即
Lf=nδ(f(xn≠yn)) (这个函数不可微)
如何找到最好的函数
比如感知机(Perceptron)、支持向量机(SVM)
4.2分类模型之概率生成模型
贝叶斯公式
PA∩B=PAPBA=P(B)P(A|B)
PA|B=PBAPAP(B)
全概率公式
PB=i=1NP(Ai)P(B|Ai)
概率生成模型(Probalitity Generative Model)
假设有两个类别C1和C2 ,要判断对象x属于哪个类别,即计算x 属于类别C1的概率,这样把分类问题变成了概率计算问题。
1.根据贝叶斯公式和全概率公式可以知道,x 属于类别C1 的概率为:
PC1|x=PxC1PC1P(x)=PxC1PC1PxC1PC1+PxC2PC2
2. 概率生成模型的意思就是可以通过这个模型生成一个x , 具体来讲就是,根据
Px= PxC1PC1+PxC2PC2 , 就可以知道x 的分布进而生成x 。如果想要计算出Px ,就要根据训练集估计出PC1 、PxC1 、PC2 、PxC2 这四个值。
3. 可以根据数据集中属于两个类别的对象的数量计算PC1和PC2这两个先验概率(Prior Probability)。
如果有2个样本属于类别C1 ,4个样本属于类别C2 ,那PC1=1/3 、PC2=2/3 。
4. 要计算后验概率(Posterior Probability)PxC1 和PxC2 ,可以假设训练集中的各类别样本的特征分别是从某个多元正态分布(多元对应特征的多维)中取样得到的,或者说是假设训练集中各类别样本的特征分别符合某多元正态分布。
e.g.: 该正态分布的输入是一个样本的特征x ,输出为样本x 是从这个正态分布取样得到(或者说该样本属于某类别)的概率密度,然后通过积分就可以求得PxC1 和PxC2.
5. 正态分布有2个参数,即均值μ (代表正态分布的中心位置)和协方差矩阵(Covariance Matrix)σ (代表正态分布的离散程度),计算出均值μ 和协方差σ 即可得到该正态分布。
6.实际上从任何一个正态分布中取样都有可能得到训练集中的特征,只是概率不同而已。通过极大似然估计(Maximum Likelihood Estimate,MLE),我们可以找到取样得到训练集特征的概率最大的那个正态分布.
(在一组Function Set里的每一个Function,对于同一组训练数据,都有可能产生,区别在于每一个Function产生这组数据的概率并不相同,通过极大似然估计,可以找到在这组Function Set里的所有Function中产生这组数据概率最大的那一个Function,该Function就是我们所要找到的最佳的Function)
协方差矩阵共享
每个类别的特征符合一个多元正态分布,每个多元正态分布也有不同的均值和协方差矩阵。让每个类别对应的多元正态分布共享一个协方差矩阵(各个协方差矩阵的加权平均和),公式为
σ=N1N2+N1σ1+N2N2+N1σ2
(可以减少模型参数,缓解过拟合。)
极大似然估计
定义:
极大似然估计指已知某个随机样本满足某种概率分布,但是其中具体的参数不清楚,然后通过若干次试验,观察其结果,利用结果推出参数的大概值。一般说来,在一次试验中如果事件A发生了,则认为此时的参数值会使得P(A|θ) 最大,极大似然估计法就是要这样估计出的参数值,使所选取的样本在被选的总体中出现的可能性为最大。
求极大似然函数估计值的一般步骤:
1.写出似然函数
2.对似然函数取对数,并整理
3.求导数
4.解似然方程
除了正态分布,还可以用其它的概率模型。
比如对于二值特征,可以使用伯努利分布(Bernouli Distribution)。
朴素贝叶斯分类
如果假设样本各个维度的数据是互相独立的,那这就是朴素贝叶斯分类器(Naive Bayes Classfier)。
Sigmoid函数(11+e-z=σ(z))
已知
PC1|x=PxC1PC1P(x)=PxC1PC1PxC1PC1+PxC2PC2=11+PxC2PC2PxC1PC1
令
z=lnPxC2PC2PxC1PC1
则
PxC1PC1PxC1PC1+PxC2PC2=11+PxC2PC2PxC1PC1=11+e-z=σ(z)
最后可得到PC1|x=σw*x+b (w,b为常数)
4.3分类模型之逻辑回归
概率生成模型:1.假定Function Set(例如正态分布,高斯分布)2.根据最大似然估计和Training Data在Function Set中选择最合适的Function
逻辑回归
模型定义:在分类(Classification)一节中,我们要找到一个模型Pw,b(C1|x) ,如果Pw,bxC1>0.5 ,则x 属于类别C1 ,否则属于类别C2 。
可知Pw,bxC1=σ(z) ,其中11+e-z=σ(z) (Sigmoid Function)(细节见4.2)
z=ω∙x+b=i=1Nωixi+b
最终我们找到了模型
fw,bx=σ(i=1Nωixi+b)
Loss Function
从模型fw,bx=Pw,bxC1 中取样得到训练集的概率为:(似然函数)
Lw,b=fw,bx1fw,bx21-fw,bx3…fw,b(xN)
要求
w*,b*=arg maxw,bL(w,b)
等同于:
w*,b*=arg minw,b-lnL(w,b)
(对数似然方程,Log-likelihood Equation)
-lnLw,b=-lnfw,bx1-lnfw,bx2-ln1-fw,bx3…-lnfw,b(xN)
其中
lnfw,bxn=ynlnfw,bxn+(1-yn)ln[1-fw,bxn]
所以
-lnLw,b=n=1N-[ynlnfw,bxn+(1-yn)ln[1-fw,bxn]]
逻辑回归VS线性回归
模型:
逻辑回归模型比线性回归模型多了一个sigmoid函数;
逻辑回归输出是[0,1],而线性回归的输出是任意值。
损失函数
逻辑回归模型使用的训练集中label的值必须是0或1,而线性回归模型训练集中label的值是真实值。(图中线性回归损失函数中的1/2是为了方便求导)
梯度
逻辑回归模型和线性回归模型的梯度公式一样
判别模型VS生成模型
形式对比
逻辑回归是一个判别模型(Discriminative Model),
用正态分布描述后验概率(Posterior Probability)则是生成模型(Generative Model)。
如果生成模型中共用协方差矩阵,那两个模型其实是一样的,都是
PC1|x=σw*x+b
因为做了不同的假设,即使是使用同一个数据集、同一个模型,找到的函数是不一样的。
优劣对比
1.如果现在数据很少,当假设了概率分布之后,就可以需要更少的数据用于训练,受数据影响较小;而判别模型就只根据数据来学习,易受数据影响,需要更多数据。
2.当假设了概率分布之后,生成模型受数据影响较小,对噪声的鲁棒性更强。
3.对于生成模型来讲,先验的和基于类别的概率即PC1 、PC2 ,可以从不同的来源估计得到。以语音识别为例,如果使用生成模型,可能并不需要声音的数据,网上的文本也可以用来估计某段文本出现的概率。
多分类(Multi-class Classification)
以3个类别C1、C2和C3为例,分别对应参数(w1、b1),(w2、b2),(w3、b3)即
z1=w1∙x+b1
z2=w2∙x+b2
z1=w3∙x+b3
Softmax
yi=ezij=13ezj
梯度:和逻辑回归的思路一样。
逻辑回归的局限
如下图所示,假如有2个类别,数据集中有4个样本,每个样本有2维特征,将这4个样本画在图上。
如下图所示,假如用逻辑回归做分类,即y=σz=σ(w1x1+w2x2+b) , 我们找不到一个可以把“蓝色”样本和“红色”样本间隔开的函数。
特征变换(Feature Transformation)
如下图所示,我们可以把原始的数据/特征转换到另外一个空间,在这个新的特征空间中,找到一个函数将“蓝色”样本和“红色”样本间隔开。
5.1深度学习
深度学习的三个步骤(和机器学习)一样:
1.确定模型(Model)/函数集(Function Set),在深度学习中就是定义一个神经网络。
不同的连接会构成多样的网络结构。
2.确定如何评价函数的好坏
如果是多分类,那和Classification一章中一样,计算每个样本预测结果与Ground Truth的交叉熵,然后求和,即为Loss。
3.确定如何找到最好的函数
还是Gradient Descent。
神经网络模型对应的函数比较复杂,而反向传播算法(Backpropagation)是一个很有效的计算神经网络梯度的方法。
神经网络的结构
1.输入层(Input Layer)
实际上就是输入,并不是真正的“层”。
2.隐藏层(Hidden Layers)
输入层和输出层之间的层。Deep指有很多隐藏层,多少层才算Deep并没有统一标准。
可以看成特征提取器(Feature Extractor),作用是代替特征工程(Feature Engineering)。
3.输出层(Output Layer)
最后一层。
可以看成分类器
全连接前馈神经网络(FNN)
1.全连接是指每个神经元与上一层的所有神经元相连。
2.前馈神经网络(FNN,Feedforward Neural Network)是指各神经元分层排列,每个神经元只与前一层的神经元相连,接收前一层的输出,并输出给下一层,各层间没有反馈。
5.2神经网络为什么要是深度的
为什么是“深度”神经网络?
1.在参数量相当的情况下,高瘦的神经网络(即深度神经网络)的准确度更高,因为深度可以实现模块化。
2.只用一个神经元足够多的隐藏层,这个模型就包括了任意函数, 但实现的效率不高
如下图所示,我们可以先定义各属性的分类器(Classifiers for the attributes),即先定义性别和头发长短的分类器,然后再做四分类。这样第一层分类器就不会遇到样本少的问题,第二层的分类器也容易训练,整体上也需要更少的训练集。
在深度神经网络中,每层网络都可以作为下一层网络使用的一个模块,并且这个模块化是通过机器学习自动得到的。
5.3神经网络中的反向传播算法
链式法则(Chain Rule)
z=hy,y=gx→dzdx=dzdydydx
z=kx,y,x=gs,y=hs→dzds=dzdxdxds+dzdydyds
反向传播算法(Backpropagation)
变量定义
设神经网络的输入为xn ,该输入对应的label是yn ,神经网络的参数是θ ,神经网络的输出是yn 。
整个神经网络的Loss为
Lθ=n=1NCn(θ)
假设θ 中有一个参数ω ,那么
∂L(θ)∂ω=n=1N∂Cn(θ)∂ω
Forward Pass
Forward Pass是为所有参数ω 计算∂z∂ω ,它的方向是从前往后算的,所以叫Forward Pass。
以一个神经元为例,因为z=x1ω1+x2ω2+b ,所以∂z∂ω1=x1 , ∂z∂ω2=x2 (规律是:该权重乘以的那个输入的值)
所以当有多个神经元时,如下图所示。
Backward Pass
Backward Pass是为所有激活函数的输入z 计算∂C∂z , 它的方向是从后往前算的,要先算出输出层的∂C∂z , 再往前计算其它神经元的∂C∂z , 所以叫Backward Pass。
6.1神经网络训练问题与解决方案
在深度学习中,一般有两种问题:
在训练集上性能不好
在测试集上性能不好。
处理神经网络在训练集上性能不好的情况的方法
1.修改神经网络架构,比如换成更好的激活函数
sigmoid函数会导致梯度消失,可以换成ReLU、Leaky ReLU、Parametric ReLU、Maxout
2.调整学习率
比如RMSProp、Momentum、Adam
处理神经网络在测试集上性能不好的情况的方法
1.Early Stopping、Regularization,这两个是比较传统的方法,不只适用于深度学习
2.Dropout,比较有深度学习的特色
6.2神经网络精度低不一定是因为过拟合
如果神经网络在训练集上精度高但在测试集上精度低,这才说明神经网络过拟合了。
6.3常用激活函数
梯度消失(Vanishing Gradient Problem)
sigmoid函数:随着神经网络层数增加,识别准确率逐渐下降,这个现象的原因并不是过拟合,而是梯度消失。
当神经网络层数很多时,
靠近输入层的参数的梯度会很小,靠近输出层的参数的梯度会很大。
当每个参数的学习率相同时,
靠近输入层的参数会更新得很慢,靠近输出层的几层参数会更新得很快。
所以,当靠近输入层的参数几乎还是随机数时,靠近输出层的参数已经收敛了。
ReLU(Rectified Linear Unit)
定义
当输入小于等于0时,输出为0;当输入大于0时,输出等于输入。
优点
相比于sigmoid函数:
1.等同于无穷多个bias不同的sigmoid函数叠加起来
2.可以解决梯度消失问题
如何解决梯度消失问题
当ReLU输出为0时该激活函数对神经网络不起作用,所以在神经网络中生效的激活函数都是输出等于输入,所以就不会出现sigmoid函数导致的减弱输入变化导致输出变化的幅度的情况。
ReLU会使整个神经网络变成线性的吗?
可知有效的激活函数都是线性的,但整个神经网络还是非线性的。当输入改变很小、不改变每个激活函数的Operation Region(操作区域,大概意思就是输入范围)时,整个神经网络是线性的;当输入改变很大、改变了Operation Region时,整个神经网络就是非线性的
ReLU可以做微分吗?
不用处理输入为0的情况,当输入小于0时,微分就是0,当输入大于0时微分就是1。
MaxOUT
定义
通过学习得到一个激活函数,人为将每层输出的多个值分组,然后输出每组值中的最大值。(ReLU是Maxout的一个特例)
如何训练Maxout
Maxout只是选择输出哪一个线性函数的值而已,因此Maxout激活函数还是线性的。
因为在多个值中只选择最大值进行输出,所以会形成一个比较瘦长/窄深的神经网络。
在多个值中只选择最大值进行输出,这并不会导致一些参数无法被训练:因为输入不同导致一组值中的最大值不同,所以各个参数都可能被训练到。
当输入不同时,形成的也是不同结构的神经网络。
7.1CNN入门详解
FNN用于图片处理的缺点:
- 需要很多的参数
- 该架构中每个神经元就是一个分类器,这是没必要的
图片性质:
- Some patterns are much smaller than the whole image.
- The same patterns appear in different regions.
比如说人脸可以在图片的中间区域,也可以在图片的某个角落区域。所以识别不同区域中的相同pattern的多个分类器(或detector)应该用同一组参数或者共享参数。
(在图片中,不同图片的同一目标特征可能出现在不同位置)
- Subsampling the pixels will not change the object
将图片缩小/下采样,并不会影响我们理解图片。所以我们可以通过将图片变小,进而用更少的参数处理图片。
CNN架构说明
图片经过卷积层然后进行最大池化(max pooling),这个步骤可以进行多次;然后将数据展开(Flatten),然后将数据传进全连接前馈网络得到最后的图片分类结果。
Convolution VS Fully Connected
- 模型的参数更少:因为没有使用所有像素、不是全连接,因此需要的参数更少。
- 参数共享:因为用同1个卷积核在图片的不同区域做卷积,即用1组参数对不同区域的像素进行计算,得到了多个值、达成了多个神经元的效果,实现了参数共享。
最大池化(Max Pooling)
Flatten & FNN
经过一系列的卷积和最大池化,将得到的特征图展开排列,作为FNN的输入,最后输出结果。
(CNN目的是将图片数据进行压缩处理,最终将得到的特征图展开为向量,连接FNN作为其输入)
7.2CNN学到了什么
卷积核(filter)学到了什么
各卷积核适用于检测小的纹理
全连接层学到了什么
卷积核学习到的是较小的pattern,全连接层中的神经元学习到的是尺寸较大的pattern。
输出层学到了什么:我们所要筛选的目标
9.1循环神经网络RNN