1700508440
1700508441
每次通过更新wij进行迭代,经过多次迭代找到极小值的wij。
1700508442
1700508443
1700508444
1700508445
1700508446
1700508447
1700508448
1700508449
其中,η是学习率,即更新时移动的步长基数;和分别对矩阵中的第i行第j列的w和b求偏导数。这种更新方式会使Loss函数优化过程在最初斜率较大的部分移动更新幅度较大,而在临近极小值的部分自动将更新幅度调小。至于每个wij究竟应该移动多少,我们通过推导相对容易的平方损失函数来看一看。这里的“C”代表“Cost”,与“Loss”同义。根据链式法则,有
1700508450
1700508451
1700508452
1700508453
1700508454
则对最后一层上任意一个神经元的w0,都有
1700508455
1700508456
1700508457
1700508458
1700508459
1700508460
别忘了,这里还有一个激励函数。
1700508461
1700508462
同理,对最后一层上任意一个神经元的b,都有
1700508463
1700508464
1700508465
1700508466
1700508467
对最后一层来说,它的前一层的任意一个神经元的输出都是其函数的输入,那么对于其前一层的任意一个神经元的w1和b1来说,仍然可以用链式法则来推导。
1700508468
1700508469
通常这种损失函数得到的值非常大(可能是几百万,上亿也毫不奇怪),尤其是在几百万维的图片识别训练中——这与它的定义有关。在它逐步减小的过程中,通过判断损失函数值超过某个值来决定终止通常是很不明智的,原因有如下两个。
1700508470
1700508471
第一,在这个收敛过程中,损失值的大小没有具体的物理解释,所以无法通过指定一个“较小”的损失值来确保召回率和准确率。
1700508472
1700508473
第二,如果通过不断的收敛,最终使损失函数的值减小为0,通常也会产生严重的过拟合现象,这种现象在模式识别中会显得格外严重。
1700508474
1700508475
所以,在训练过程中,通常会把整个训练集按一定的比例分配,一部分作为训练集,另一部分作为验证集。例如,按4∶1的比例分配,其中80%的样本用来做训练,20%的样本用来做验证(抑或其他比例,70%的样本用来做训练,30%的样本用来做验证)。训练过程是:在用80%的样本做训练的同时,不断用当前迭代产生的wij矩阵去对20%的样本做分类,直到分类结果中召回率和准确率没有明显的提高为止,否则就会看到一个现象——随着训练时间的延长(Epoch增多),验证集中的损失函数值反而会增加(召回率和准确率会下降)。此外需要注意,样本的数量要足够多(因为样本数量太少本身就非常容易造成过拟合)。
1700508476
1700508478
11.9.4 非线性分类
1700508479
1700508480
神经网络最强大的地方在于它对复杂的线性不可分问题的处理能力,这是SVM无法企及的,也是神经网络最大的优势。在深度神经网络(深度学习)领域,通过对网络进行合理的设计,通常能够对音乐、图像、视频等模式识别领域的分类有比较好的召回率和准确率。
1700508481
1700508482
为什么深度神经网络有这么好的非线性分类能力呢?我们来看看样本通过网络的时候究竟发生了什么。
1700508483
1700508484
如图11-44所示,在一个二维空间中有一个六角形,如果要用普通的线性0, 1分类器对这样一个“不规则”图形做分类,是无论如何都找不到一条(一个)可以把空间恰好分为两部分的直线(超平面)的——一部分是组成六角形的部分,另一部分不是组成六角形的部分。这种情况下的BP网络应该怎么设计呢?
1700508485
1700508486
1700508487
1700508488
1700508489
图11-44 非线性分类
[
上一页 ]
[ :1.70050844e+09 ]
[
下一页 ]