face_recognition原理
最近做实时人脸识别,用到了face_recogonition,老师让我们探索一下背后的原理。经过多番资料查询,发现改人脸识别模型是一个具有29个转换层的ResNet网络。之前也看到了有残差网络这一个概念。故有此记录。
ResNet概述
ResNet(Residual Neural Network)由微软研究院的Kaiming He等四名华人在15年提出,并在ILSVRC2015比赛中取得冠军。
ResNet的提出让深度学习的“深”更深了(据说可以达到1000层)。
随着网络的加深,出现了训练集准确率下降的现象;所以作者针对这个问题提出了一种全新的网络——残差网络
ResNet结构
当查阅其他资料的时候,我相信大家会看到一样一个模型:
这里我在加上
吴恩达老师课堂的图,网易云课堂可以看
正常的网络传输如图两层过后为
而残差网络
经过残差网络两层输出后是这里多了个残差块a[l]
而一直让我感到疑问的就是既然残差网络,看了那么多原理的讲解就是跳跃或者是把输入带入往更深层网络,那为什么这里的公式看起来只是多了一个a[l],这里一直让我很迷糊。然后在
深度碎片up主的深度学习视频下看到 ‘Doge君-25’的评论以下是原话:
普通深度神经网络(plain network)如果深度太深,根据梯度下降算法,离输出层越远的隐含层的乘积项会越多(通常会越乘越小),导致这些层的神经元训练会越缓慢(如果计算机精度不够的话,可能还会变0),导致难以或无法训练 残差网络,则是在普通神经网络基础上,把两层或多层的神经元组成一个residual block,将输入block和从最后一层的输出相加再通过输出函数送进下一个block。这样的好处是,在梯度下降的计算上,偏导数变成了1+原来的乘积项,就不会因为越乘越小,而导致远离最终输出的那层隐含层调参缓慢或甚至无法调参。
接着在返回去看ResNet的各种资料,变有了更深的理解。
还有更多详细的资料这里就不过多赘述。