联系我们
- 地 址:北京市海淀区北四环西路9号 ,主 营:人脸识别,活体检测,身份证识别,银行卡识别,名片识别,车牌识别,OCR识别等及智能识别技术。
- 电 话:13146317170 廖经理
- 传 真:
- 邮 箱:398017534@qq.com
深度学习神经网络入门
深度学习神经网络入门门
单个神经元结构
对于单个神经元,如果我们给每一个输入一个权重,例如有三个输入(x1,x2,x3),相应的权重为(w1,w2,w3),则输入对于输出的影响为 WX^T=(w1*x1+w2*x2+w3*x3)。
现在,设定如果该值大于阈值 threshold,那么输出1;如果该值小于阈值,则输出0。用 bias=-threshold,可将上述描述简单化。
640?wx_fmt=png&wxfrom=5&wx_lazy=1
令 bias = - threshold,则:
640?wx_fmt=png&wxfrom=5&wx_lazy=1
有了上面的设定,我们就可以模拟是非问题,假设要判断一个图片中是否有狗,output=1 表示有,output=0 表示没有,我们只需要看给定权重(W)和偏置(Bias)的情况下,通过给定输入看输出就可以得到我们想要的信息了。
为了描述更细微的变化,我们将 output 的值域由0和1转变为 [0,1],该任务可以用 sigmoid 函数完成。
640?wx_fmt=png
神经网络结构
由多个神经元组成的结构就称作神经网络。
关于神经网络的几个术语:
前向传播
梯度下降法求解
反向传播
等等,可能看了很多资料也云里雾里搞不清楚它们是干什么的,这里希望我的讲述能够带您走出此迷宫!
正如,我前面所说的,给定权重和偏置的基础上,输入对应输出,输入层 (input_1,input_2,input_3) 作用于隐藏层,得到三个中间值 (a_1,a_2,a_3),这三个中间值再作用于输出层得到最终的输出值 output,这一过程就是正向传播。
也就是,有了权重和偏置,我们的模型就确立了,给定输入,计算可得输出。
那么,问题来了,如果我们有一堆训练数据,我们怎么得到模型呢?也就是说我们如何获得模型中对应的权重和偏置呢(像上面的简单模型中,我们有33+3+31+1=16个参数)?
这是一个参数估计的过程。
插句话:模型是由参数决定的,那么常常就涉及这两个问题:模型参数已知,由输入计算输出;模型参数未知,由数据和一些数学方法进行参数估计。
我们用最小化输出差来完成参数的估计。
目标函数:
640?wx_fmt=png
假设 a 为 x 对应的真实值,y(x) 为通过网络模型计算得到的输出值。两者差值越小,说明模型参数越合理,这是无需多言的。此外,目标函数的参数只有 W 和 B,此行的目标便是求得使目标函数最小的 W 和 B。
该问题一般使用梯度下降法进行解决。
权重和偏置的更新方程:
640?wx_fmt=png
如果能够已知偏导数,则迭代至目标函数收敛即可。
那么现在的问题就是,如何求得网络模型中那么多参数的偏导?这里就用到了传说中的 BP 算法(也称 Back-Propagation,或反向传播算法)。
BP 算法的目的就是解决下图所示的问题。
640?wx_fmt=png
BP 的核心是四个公式(四个公式的推导后续会补充到读者圈里):
640?wx_fmt=png
公式1,得到由 y 和 a^L (真实值)求的最后一层的偏差 delta^L。
公式2,由下一层的偏差推导出上一层的,如下:
640?wx_fmt=png
由公式1和公式2就可以求得网络中所有的 delta_j^l,再结合公式3和公式4,就可以求得所有的偏导,进而使用梯度下降法进行迭代。
如此,参数估计算法流程如下:
step1:初始化权重和偏向(Weights and Bias);
step2:输入参数x,设置输入层的 activation a^{input} = x;
step3:正向更新,对于 l1、l2...,L 计算激活值(也就是每个神经元的输出);
640?wx_fmt=png
step4:计算输出层误差。
640?wx_fmt=png
step5:反向更新得到各层的误差。
640?wx_fmt=png
step6:得到各个偏导值。
640?wx_fmt=png
step7:得到更新后的权重和偏置。
640?wx_fmt=png
使用更新后的权重和偏置重新计算,直到目标函数收敛,也就是前后两次的值基本不变。
640?wx_fmt=png
总结
参数决定模型(在神经网络中,决定神经网络模型的就是其对应的权重和偏置),常常涉及的两个问题就是已知模型参数,由输入计算输出和参数估计问题;
正向传播:已知模型参数(权重和偏置),求不同输入下输出的过程;
BP的核心是四个公式,目的在于计算偏导数,用于使用梯度下降法最小化目标函值。
对于单个神经元,如果我们给每一个输入一个权重,例如有三个输入(x1,x2,x3),相应的权重为(w1,w2,w3),则输入对于输出的影响为 WX^T=(w1*x1+w2*x2+w3*x3)。
现在,设定如果该值大于阈值 threshold,那么输出1;如果该值小于阈值,则输出0。用 bias=-threshold,可将上述描述简单化。
640?wx_fmt=png&wxfrom=5&wx_lazy=1
令 bias = - threshold,则:
640?wx_fmt=png&wxfrom=5&wx_lazy=1
有了上面的设定,我们就可以模拟是非问题,假设要判断一个图片中是否有狗,output=1 表示有,output=0 表示没有,我们只需要看给定权重(W)和偏置(Bias)的情况下,通过给定输入看输出就可以得到我们想要的信息了。
为了描述更细微的变化,我们将 output 的值域由0和1转变为 [0,1],该任务可以用 sigmoid 函数完成。
640?wx_fmt=png
神经网络结构
由多个神经元组成的结构就称作神经网络。
关于神经网络的几个术语:
前向传播
梯度下降法求解
反向传播
等等,可能看了很多资料也云里雾里搞不清楚它们是干什么的,这里希望我的讲述能够带您走出此迷宫!
正如,我前面所说的,给定权重和偏置的基础上,输入对应输出,输入层 (input_1,input_2,input_3) 作用于隐藏层,得到三个中间值 (a_1,a_2,a_3),这三个中间值再作用于输出层得到最终的输出值 output,这一过程就是正向传播。
也就是,有了权重和偏置,我们的模型就确立了,给定输入,计算可得输出。
那么,问题来了,如果我们有一堆训练数据,我们怎么得到模型呢?也就是说我们如何获得模型中对应的权重和偏置呢(像上面的简单模型中,我们有33+3+31+1=16个参数)?
这是一个参数估计的过程。
插句话:模型是由参数决定的,那么常常就涉及这两个问题:模型参数已知,由输入计算输出;模型参数未知,由数据和一些数学方法进行参数估计。
我们用最小化输出差来完成参数的估计。
目标函数:
640?wx_fmt=png
假设 a 为 x 对应的真实值,y(x) 为通过网络模型计算得到的输出值。两者差值越小,说明模型参数越合理,这是无需多言的。此外,目标函数的参数只有 W 和 B,此行的目标便是求得使目标函数最小的 W 和 B。
该问题一般使用梯度下降法进行解决。
权重和偏置的更新方程:
640?wx_fmt=png
如果能够已知偏导数,则迭代至目标函数收敛即可。
那么现在的问题就是,如何求得网络模型中那么多参数的偏导?这里就用到了传说中的 BP 算法(也称 Back-Propagation,或反向传播算法)。
BP 算法的目的就是解决下图所示的问题。
640?wx_fmt=png
BP 的核心是四个公式(四个公式的推导后续会补充到读者圈里):
640?wx_fmt=png
公式1,得到由 y 和 a^L (真实值)求的最后一层的偏差 delta^L。
公式2,由下一层的偏差推导出上一层的,如下:
640?wx_fmt=png
由公式1和公式2就可以求得网络中所有的 delta_j^l,再结合公式3和公式4,就可以求得所有的偏导,进而使用梯度下降法进行迭代。
如此,参数估计算法流程如下:
step1:初始化权重和偏向(Weights and Bias);
step2:输入参数x,设置输入层的 activation a^{input} = x;
step3:正向更新,对于 l1、l2...,L 计算激活值(也就是每个神经元的输出);
640?wx_fmt=png
step4:计算输出层误差。
640?wx_fmt=png
step5:反向更新得到各层的误差。
640?wx_fmt=png
step6:得到各个偏导值。
640?wx_fmt=png
step7:得到更新后的权重和偏置。
640?wx_fmt=png
使用更新后的权重和偏置重新计算,直到目标函数收敛,也就是前后两次的值基本不变。
640?wx_fmt=png
总结
参数决定模型(在神经网络中,决定神经网络模型的就是其对应的权重和偏置),常常涉及的两个问题就是已知模型参数,由输入计算输出和参数估计问题;
正向传播:已知模型参数(权重和偏置),求不同输入下输出的过程;
BP的核心是四个公式,目的在于计算偏导数,用于使用梯度下降法最小化目标函值。
上一条:神经进化是深度学习的未来
下一条:web端身份证识别OCR