手撕神经网络-正/反向传播

摘要:最近的非常火热,强大的智能能力让人不禁感叹,人类是不是要被AI取代了,有人惶恐、有人兴奋 。每一次新技术的爆发,必然会带动一部分就业,我们要抱着积极的态度去了解他 。
今天,我们分享一下,什么是正向传播,什么是反向传播,有哪些理论依据 。随着机器学习这门专业的发展,传统的机器学习已经不能够满足AI行业的发展了,随之诞生出来的神经网络、深度神经网络这些课程 。
将学习过程想象成自然界中神经信息传递的过程,拟态到神经网络中,让计算机“拥有”了自然界中的“神经元” 。粗略地说,接收信息被大脑捕获,这个过程可以看作是一个正向的过程 。大脑下达的指令可以看作是一个反向的过程 。那计算机是如何处理和优化这个过程的呢 。
先看图1.1
图1.1
图1.1 简单模拟了神经信息的传递,假设每个圈代表着神经的接触端(可以发出信号、也可以接收信号),每个带箭头的线段代表着信息传递的方向(表示可以传递给下一个或者多个接触端) 。当然这些都是以生物学的角度来衡量的,但是以计算机的角度来说,这其实就是一个图的计算,唯一要注意的是,这个图计算的不是节点的数据,而是节点和权重的数据 。
我们先做一个假设以此来计算,假设有如下数据:
x1=1,x2=1,Y=5,w11=1,w12=1,w21=1,w22=1,b=1
说明下:x1、x2 作为输入参数也就是样本,Y作为样本对应的真实值,w11、w12、w21、w22作为权重,b作为偏移常数,圆圈代表输入或者输出节点:x系列代表输入层、z系列代表隐藏层、a系列代表隐藏层(激活),y代表样本预测 。
【手撕神经网络-正/反向传播】通过说明我们知道,唯一可以确定的数据就是样本数据:x1,x2,Y,那么我们需要做的就是要能够获取到合适的w11、w12、w21、w22的值,使得y更加接近Y 。
那么,我们看下第一次的预测结果是什么,通过数据带入得到以下数据:
z1=x1*w11+x1*w12+b=1*1+1*1+1=3
z2=x2*w21+x2*w22+b=1*1+1*1+1=3
这里我们介绍下激活函数使用Relu函数,如图1.2
图1.2
a1=3,a2=3
整理下:
z1=x1*w11+x1*w12+b=1*1+1*1+1=3
a1=3
z2=x2*w21+x2*w22+b=1*1+1*1+1=3
a2=3
y=a1+a2+b=3+3+1=7
这个过程就是一个正向传播的过程 。
我们看下误差偏移了多少,这里我们定义一个损失函数J()
J=
=2
我们发现预测值y与真实Y存在一定的差异,说明w11、w12、w21、w22的数据不合适,需要调整,调整的过程我们就称之为反向过程 。那么就以w11为例,w11=w11-l* 。
w11:w11的值 。
l:表示学习率,作为超参可以自己定义,这里定义为0.02 。
:这个表示求w11的梯度 。
通过上述的公式,我们发现,只要获取到,那么w11的数据就会被更新了 。也就说我们需要对误差进行梯度 。
=dJ/dw11=(dJ/dy) *(dy/da1)*(da1/dz1)*(dz1/dw11)
将数据进行带入dJ/dw11=(y-Y)*1*1*1=(7-5)*1=2
所以=2,w11=1-0.02*2=0.96,最后,w11更新为了0.96 。
至此,上述过程为反向传的过程,重复这个过程,直到达到满意的一个预测结果,就可以结束这个过程了 。
上述的过程我们发现了初始化的数据对训练会产生影响,所以你发现在哪里产生影响了吗?
今天就到这里了,下次再聊 。
如有疑问请添加群: