先来回顾一下神经网络的经典结构,如下图所示:

一般神经网络分为:输入层,隐藏层,输出层。上图中的连线代表的是神经网络中的参数,参考下面的图:

常用的激活函数有:

如果对上面的内容有疑惑的话,可以参考笔者的上一篇文章《谈谈对神经网络的理解 “谈谈对神经网络的理解”》,这里不再赘述。
好了,下面进入正题。
损失函数的概念
在讲优化算法之前,我们先要明确损失函数的概念,损失函数有很多种说法,中文也可以叫代价函数或者目标函数,英文中有 loss function, cost function, objective function. 实际上指得是同一个概念。
首先,神经网络是用来解决实际问题的,我们以分类问题来举例。假设我们要做图片的猫狗分类,即输入一张图片,判断是猫还是狗。

神经网络只能输出数值,没办法输出概念,所以需要对猫狗概念做一个转化,类似于数学建模。我们可以令网络输出为 0 时代表猫,输出为 1 时代表狗。不过就像世界不是非黑即白一样,有时候我们需要的也不是这样一个非 0 即 1 的输出,我们希望知道神经网络认为输入图片是狗的概率值,所以我们设计神经网络的输出为 [0, 1] 之间的浮点数,其数值就代表输入图片是狗的概率。若输入图片是狗,我们希望神经网络的输出越大越好;反之,若输入图片是猫,则我们希望神经网络的输出越小越好。
前面我们是以定性的方式评判神经网络的输出(越大越好或越小越好),但计算机只认数字,所以我们要将定性评判方式改为定量评判方式,即用损失函数来取代前面的越大越好或越小越小这样的定性说法。
最简单的损失函数的均方差损失函数(Mean Squared Error,MSE),如下所示:

其中,N 是样本是数目,o 是神经网络输出,y 是真实值。那么为什么用平方差来作为误差的衡量,而不是直接用差的绝对值呢?这是因为绝对值在求导数时不方便,而平方计算求导数时简单方便(至于为什么需要求导数,后文会讲)。
使用均方差损失函数可以很容易的衡量神经网络分类效果的好坏,当均方差为 0 时,说明神经网络 100% 分类正确,均方差越大,说明错误越多。
除了均方差损失函数,还有很多其他常用的损失函数,比如交叉熵损失函数(Cross entropy),这里不展开细讲,读者只需要理解损失函数是对神经网络输出结果好坏的定量评判。针对不同的任务,我们会使用不同的损失函数。
损失函数可视化
为了更好的理解损失函数的性质,我们可以对其进行可视化。前面我们知道,损失函数是对神经网络输出的定量评判,所以损失函数实际上是神经网络参数的函数。受限于人类的感官,我们以二维情况举例,假设神经网络只有 w1, w2 两个参数,即

其中,f 代表的神经网络的运算集合。
分别以 w1, w2 为 x, y 轴,用颜色代表 Loss 大小,可以在二维平面画出损失函数的图像,如下所示:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RWeREJ6f-1572681941001)(http://km.oa.com/files/photos/pictures//20190119//1547885188_94.png)]
中间的黑色代表损失函数最小的位置,也是我们的优化目标。
优化(Optimization)
神经网络优化问

最低0.47元/天 解锁文章
272

被折叠的 条评论
为什么被折叠?



