图像分类——如何完成分类这一工作的

首先表达一下我在刚接触深度学习时的一些疑惑

首先纠正一下几个常见函数或者名词的作用

反向传播算法

反向传播的作用就是:通过输出层与样本之间的误差从而更新每一层每个神经元的权重。

反向传播算法的目的在于对于求解像卷积神经网络这样的结构当中的Loss损失函数时,无法简单的求出偏导进而更新权重θ值的问题
通过研究发现如果通过反向求每一层的损失Loss时,发现了一个特别的规律,就是每一层的偏导都和某些值(某层的Loss函数)有关系,这样就特方便的求出了偏导

在这里插入图片描述

反向传播算法—知乎(可以参考此文章的推导过程如果有兴趣)

卷积神经网络/神经网络前向传播输入层to隐藏层之间的初始权重的问题

我们可以理解一下,输出到某一层神经元的值是相同/相似比较好,还是不相同各有特点的比较好
不难理解,当然是从图片当中提取的特别抽象的特征(以数值表示)差别越大越好,因为如果都相似的话就等同于特征根本没有提取到,这个问题的专业名词叫做表现力受限

如果有些了解的话,我们会对输入到下一层的神经元值进行Sigmoid函数激活,我们也会发现若是Sigmoid(x)的x越大or越小,那么Sigmod(x)越会偏向0或者1。当一组神经元的值通过Sigmoid函数处理之后,我们去实现反向传播算法时,求的偏导不难理解都会接近0,这样就引出了第二个问题,专业词汇叫做梯度消失(补充:因为偏导都为0了,还怎么计算)

在这里还是选择放一张Sigmoid函数:
在这里插入图片描述

那么回到正题,如何解决上面个的两种问题(1.表现力受限。2.梯度消失)
???

通过研究,人们推到了出了一个公式,决定使用标准差为1/根号下n其中n为输入层神经元的个数)的高斯分布作为输入层的权重分布(注意:是拿某种分布作为权重的分布)。通过测试也可以验证,通过Sigmoid函数激活的一层神经元的输出值有着不错的广度分布。这个方式就叫做Xavier!!

总结:有了输入层的初始权重,那么我们就可以进行正向传播计算Loss函数了

相邻层之间如何避免表现力受限、梯度消失的问题?

通过上面的Xavier的作用,我们知道当神经元的值呈正态分布的时候其表征的信息更加有广度和深度。为了放大这一优势,我们在相邻层之间添加了类似的操作叫做Batch Normalization!直接说的作用:

  1. 可以增大学习率(就是在epoch次数相对更少的情况下收敛(收敛的意思就是:找到Loss函数的最小值))
  2. 对于初始值不那么神经质(因为就算初始值没有采用Xavier,那么也会在下一层通过Batch Normalization进行神经元值的广度优化)
  3. 抑制过拟合(学习的目的是提高泛化能力!如果提取的特征过于集中,那么就会出现过于针对的问题,如果把特征进行处理平滑分散开来那么就会避免过于针对的问题

交叉熵损失函数是干什么的?

在这里插入图片描述
在这里插入图片描述

在提到交叉熵损失计算时,首先要知道的一点就是,假设此次分类的类别有21种,那么最后输出层的神经元就为21个
其次需要知道的一点就是,标签也是一个21维度的向量,在每一次计算的时候只有其中一个值为1,剩下的20个值都为0
最后一个就是,这21维度的向量都是在内存当中存储,是按照Python的字典形式和真实的“cat”、“dog”进行联系的

通过观察此函数的图像,可以观察到的一个特点就是,在x=0.5附近的函数值更偏向于平滑,而越靠近0他的值会按照指数级增长,这就表现了如果在输出层的某个神经元的值(其实为该类别的可能性,1为最大0为最小)越小越离谱,那么交叉熵函数就会对他进行放大从而暴露出他的问题。举个例子:

   0.1/0.6                    1            - log 0.1=2.30(损失)
	0.2                       0            - log 0.6=0.51(损失)
	0.3                       0
	0.32                      0
	0.7                       0
   输出层                    标签

标签在任何一次计算下只有一个值为1,实际上只计算对应正确解标签的输出。当神经元的值为0.1时他的损失值很大达到2.3,而0.6的时候就很小了只有0.51。

Softmax函数的误区(本人的问题)

在这里插入图片描述
当我第一次听说Softmax函数的时候,我听到的是Softmax函数完成分类的工作,这就把我带入到了一个误区,其实不然。

Softmax函数通过上面的公式可以看出,其作用是把输出层的神经元值进行概率化。21种类别的概率加起来为1这样的操作

其实就算最后的神经元值不进行Softmax函数处理,其也完成类别的区分。

卷积神经网络/神经网络如何完成分类问题并对其真实名词进行映射的???

通过以上的介绍,那么就很容易理解这个问题了!

还是按照21种类别的数据进行分析。当我们拿出21种类别的图片和大量的样本数进行输入训练的时候,随机抽取一张图片通过卷积神经网络(这其中就包括我们上面提到的Xavier初始值、Batch Normalization操作)最后输出到21个神经元当中,因为是第一次训练,这21个神经元的值也许都很普通,特征区分也不是很明显,可能都是0.1、0.3、0.4、0.35…这样的值,然后拿出第一个维度为1,剩下维度都是0的标签进行Loss的计算,发现- log 0.1=2.30,损失值很大!其次再进行- log 0.3 =某,把21个类别的损失都计算求和之后发现整个损失值很大(这也是第一次传播的应该出现的问题)。之后,我们采用反向传播算法求出偏导,进而迭代更新一组权重θ值,我们知道迭代更新权重θ值之后,其总的Loss肯定是下降了,因为迭代更新θ值的作用就是求J(θ)的最小值(梯度下降法),那么反应到输出层的交叉熵损失计算上就是,肯定存在一个某个神经元的值变大了,从而降低了Loss,例如变为0.7、0.3、0.4、0.35(当然这四个值大概率都会发生变化的,这里为了解释暂且认为其他三个值都没有发生变化),那么这一组的交叉熵肯定小于上面提到的一组交叉熵,那么重点来了!这是为什么呢?反应在特征提取上说明了,我们目前的这一组权重θ值对某一类更加敏感,或者说这一组θ值更加吻合对这一类的高层次的抽象使其区别于其他20种类别,当我们再输入一张相似的图片时,他照样会输出0.7的值。

再举一个例子:按照猪、狗、猫进行排序为三维的向量(标签也是此序列)
我们在训练当中会出现这样的情况,我们人为的知道此时输入的是一张狗的图片,但是通过的网络其权重并不对狗敏感,导致输出的值为0.6、0.3、0,4,当狗的标签为1正样本的时候,其损失值就很大了,我们希望的结果是中间的神经元的值0.3为0.7以上的值,很可惜,此时的权重θ值并不能很好对狗的图片特征敏感,还有他的Loss比较大,反馈到网络当中之后就要更新权重θ值使其Loss降低 敏感狗的特征 区别于其他类别的特征

到了这里我觉得应该很容易明白是怎么回事了,随之不断的迭代更新、随着loss越来越小,那么一组权重θ值会同时对21种类别敏感,不同的类别敏感的类型也不同。那么,此时此网络就完成了对21种类别的识别。

accuracy是如何计算得到的? (outpu输出是一个行向量)

在这里插入图片描述

如何记住常用网络的输入?

答:只要告诉我输入的channel是多少即可,输入的长宽大小无所谓会自动匹配,其次再告诉我输出channel是多少,也就是你需要多少个滤波器即可。下一层的拼接也无需考虑输入的长宽(长宽也会自动匹配),只需要知道上一层网络用了多少个filter也就是有多少个channel即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值