关于误差和梯度下降 反向传播

用一种以上的方法认识一个事物,才是真正理解它。–马文 明斯杰

首先复习之前学过的

python中的向量就是排成一排的数字集合,可以理解为一维数组
矩阵就是二维形状的数字集合
tensor张量就是把矩阵和向量扩展到N维的数据集合,标量,向量,矩阵其实都是张量。可以理解为知道了一种推到高维的方式,向下是一维,之后向右扩展成了二维,之后向上扩展变成三维度。

这里插入一个题外话,如果是更高维度的张量该如何想象。
如果考虑一个向量有三个基向量和三个component vector Ax,Ay,Az 这就是一阶张量
而当我们有九个component vectorsAxx,Axy…和9个两两基向量组合而成的集合 这就是二阶张量
如果有27个component vectorsAxxx,Axyx,Axzx…这就是三阶张量
剩下就可以以此类推了。
其实有一些偏了,把几阶张量看成几维数组就可以了,在处理的时候

损失函数

为了知道学习得如何 引入了损失函数
正确标签和神经网络得预测结果之间的误差通过标量计算出来,得到的就是损失。
计算神经网络的损失要使用损失函数,进行多类别分类的神经网络通常使用交叉熵误差作为损失函数。

交叉熵
交叉熵(Cross Entropy)是Shannon信息论中一个重要概念,主要用于度量两个概率分布间的差异性信息。语言模型的性能通常用交叉熵和复杂度(perplexity)来衡量。交叉熵的意义是用该模型对文本识别的难度,或者从压缩的角度来看,每个词平均要用几个位来编码。复杂度的意义是用该模型表示这一文本平均的分支数,其倒数可视为每个词的平均概率。平滑是指对没观察到的N元组合赋予一个概率值,以保证词序列总能通过语言模型得到一个概率值。通常使用的平滑技术有图灵估计、删除插值平滑、Katz平滑和Kneser-Ney平滑。 ——百度百科
交叉熵在深度学习中的使用
交叉熵在深度学习中作为目标识别分类常用的概念之一,主要用作loss函数,来对目标和预测之间的差异进行度量。
简单来说,我们希望模型学到的分布P(model)和训练数据的分布P(train)尽量相同。这时使用交叉熵作为loss函数,计算这两个概率分布的差异,通过最小化损失函数,使两个分布差异减小,来达到提升模型准确率的目的。接下来将对交叉熵进行详尽的解释,当然首先得从信息论开始讲起。
信息论
交叉熵是信息论中的一个概念,要想了解交叉熵的本质,需要先从最基本的概念讲起。
1 信息量
首先是信息量,顾名思义就是对信息多少的度量。对于日常生活中获取的信息,我们立刻就能主观判断其中信息量的多少。但究竟是什么因素决定了信息量的多少,如何对信息量进行精确计算。下面从例子进行分析
假设我们听到了两件事,分别如下:
事件A:巴西队进入了2018世界杯决赛圈。
事件B:中国队进入了2018世界杯决赛圈。
仅凭直觉来说,显而易见事件B的信息量比事件A的信息量要大。究其原因,是因为事件A发生的概率很大,事件B发生的概率很小。所以当越不可能的事件发生了,我们获取到的信息量就越大。越可能发生的事件发生了,我们获取到的信息量就越小。那么信息量应该和事件发生的概率有关。
假设X是一个离散型随机变量,其取值集合为χ,概率分布函数p(x)=Pr(X=x),x∈χ,则定义事件X=x0的信息量为:I(x0)=-log(P(x0))
2 熵
大部分人接触熵应该是高中化学,是一个表示分子状态混乱状态的物理量。而信息论中的熵也正是信息论之父C.E.香农从热力学中借过来的,香农用信息熵的概念来描述信源的不确定度。
不妨对比一下:
热力学中一个系统分子混乱程度越低,系统越有序,熵越小,
信息论中一个变量不确定性越小,信息熵越小,对于一个系统来说也仍然是越有序,熵越小。
这一点比较抽象,还是从例子入手:
对于某个事件,有n种可能性,每一种可能性都有一个概率p(xi)。就能计算出每一种可能性所对应信息量。
假设你拿出了你的电脑,按下开关,会有三种可能性,下表列出了每一种可能的概率及其对应的信息量:
序号 事件 概率p 信息量I
A 电脑正常开机 0.7 -log(p(A))=0.36
B 电脑无法开机 0.2 -log(p(B))=1.61
C 电脑爆炸了 0.1 -log(p©)=2.30
那么对于上述开机事件,香农指出,它的信息熵应为:
0.7*0.36+0.2乘以1.61+0.1乘以2.30=0.252+0.322+0.23=0.804
熵值不大,说明你的“电脑能否正常开机”这一事件的不确定度较小,换句话来说通常情况下正常开机依旧能打败全国99%的电脑。这还是建立在“电脑无法开机”和“电脑爆炸”分别取了0.2和0.1的情况下。
总而言之,信息熵可以通俗理解为信息量的期望,尽管这并不严谨。同时,也不难看出,对于一个事件或者说一个随机变量来说,给定的概率分布决定了其信息量,进而决定了其信息熵。那么,如何衡量同一随机变量的不同概率分布之间的差异,便用到了下面的相对熵。
3 相对熵(KL散度)
相对熵又称KL散度,如果我们对于同一个随机变量 x 有两个单独的概率分布 P(x) 和 Q(x),我们可以使用 KL 散度(Kullback-Leibler (KL) divergence)来衡量这两个分布的差异
维基百科对相对熵的定义

In the context of machine learning, DKL(P‖Q) is often called the information gain achieved if P is used instead of Q.

即如果用P来描述目标问题,而不是用Q来描述目标问题,得到的信息增量。 e.g.:
在机器学习中,P往往用来表示样本的真实分布,比如[1,0,0]表示当前样本属于第一类。Q用来表示模型所预测的分布,比如[0.7,0.2,0.1]
直观的理解就是如果用P来描述样本,那么就非常完美。而用Q来描述样本,虽然可以大致描述,但是不是那么的完美,信息量不足,需要额外的一些“信息增量”才能达到和P一样完美的描述。

KL散度的计算公式:
关于误差和梯度下降 反向传播_第1张图片
DKL的值越小,表示q分布和p分布越接近。在机器学习中,我们需要评估label和predicts之间的差距,使用KL散度刚刚好。也就是说,原本是没交叉熵什么事的。但既然是使用交叉熵而不是相对熵,那就肯定是有其优势所在。
4 交叉熵
不妨先将相对熵的公式进行变形:
关于误差和梯度下降 反向传播_第2张图片
巧了,前一部分就是p的熵,后一部分,就是交叉熵:
关于误差和梯度下降 反向传播_第3张图片由于前一部分−H(p(x))不变,当我们使−H(p(x))数值为0,或者只需观察相对熵的变化趋势的时候,也就只需要观察交叉熵即可。故在机器学习的优化过程中,只需要关注交叉熵就可以了。所以一般在机器学习中直接用交叉熵做loss,评估模型。
机器学习中交叉熵的应用
1交叉熵在单分类问题中的使用
这里的单类别是指,每一张图像样本只能有一个类别,比如只能是狗或只能是猫。交叉熵在单分类问题上基本是标配的方法
关于误差和梯度下降 反向传播_第4张图片
上式为一张样本的loss计算方法,n代表着n种类别,yi代表标签
举例说明,比如有如下样本
对应的标签和预测值

青蛙 老鼠
LABEL 0 1 0
PRED 0.3 0.6 0.1

那么
关于误差和梯度下降 反向传播_第5张图片

这就完成了对这一样本loss的计算 2 交叉熵在多分类问题中的使用
这里的多类别是指,每一张图像样本可以有多个类别,比如同时包含一只猫和一只狗 比如下面这张样本图,即有青蛙,又有老鼠,所以是一个多分类问题

青蛙 老鼠
LABEL 0 1 1
PRED 0.1 0.7 0.8

值得注意的是,这里的Pred不再是通过softmax计算的了,这里采用的是sigmoid。将每一个节点的输出归一化到[0,1]之间。所有Pred值的和也不再为1。换句话说,就是每一个Label都是独立分布的,相互之间没有影响。所以交叉熵在这里是单独对每一个节点进行计算,每一个节点只有两种可能值,所以是一个二项分布。对于二项分布这种特殊的分布,熵的计算可以进行简化。
同样的,交叉熵的计算也可以简化,即
关于误差和梯度下降 反向传播_第6张图片注意,上式只是针对一个节点的计算公式。这一点一定要和单分类loss区分开来。
例子中可以计算为:
单张样本的loss即为loss=loss猫+loss蛙+loss鼠=-0log0.1-(1-0)log(1-0.1)-log0.7-(1-1)log0.3-1log0.8-0*log0.2=-log0.9-log0.7-log0.8=
总结 机器学习涉及到很多基础学科的知识,既然是基础就一定要学扎实。特别是统计学中的很多知识在机器学习中都有着很灵活的运用。

你可能感兴趣的:(笔记,神经网络,深度学习,python)