机器学习:对于反向传播算法(backpropagation)的理解以及python代码实现
来源:互联网 发布:进入mysql控制台命令 编辑:程序博客网 时间:2024/05/22 07:40
本文是对机器学习中遇到的后向传播算法进行理解,假设读者已经知道神经网络中的神经元的含义,激励函数的定义,也知道了后向传播算法那个传播公式等。本文主要是为了理解为什么后向传播算法中的
如上图,其中,L是神经网络的层数,a是神经元的输出,
对于最后一层的神经元来说,偏差E我们可以很容易地定义:
其中,
在这里,
所以,
显然,由于我们知道了
现在,让我们往后一层来看。
在这一层,我们要对
根据我们对
那么接下来我们的目标就是要求出
这样我们就找到了
以此类推,再往后一层:
在这一层,我们要对
所以,只要我们找到每一层的
现在,让我们来考虑任意一层的情况了。
假设
所以,
其中,
这样我们就得到了
接下来我们要求
其中,
最后,我们就可以求出第
最后,我们用python实现一个简单的神经网络的训练。假设我们的训练集如下图所示:
# -*- coding: utf-8import numpy as np# define sigmoid functiondef nonlin(x,deriv=False): if(deriv==True): return x*(1-x) return 1/(1+np.exp(-x))# input dataset 总共有4组输入X = np.array([ [0,0,1], [0,1,1], [1,0,1], [1,1,1] ])# output dataset 四组输出y = np.array([[0,1,1,0]]).T#seed random numbers to make calculationnp.random.seed(1)# initialize weights randomly with mean 0#theta0 是一个3*4的参数矩阵,输入层有3个输入节点(神经元),隐藏层有4个节点(神经元),所以参数是3*4d的矩阵theta0 = 2*np.random.random((3,4)) - 1#theta1是一个4*1的参数矩阵,隐藏层有4个节点(神经元),输出层有1个节点(神经元)theta1 = 2*np.random.random((4,1)) - 1for j in xrange(60000): a0 = X #a0表示第一层(输入层),a0的每一行表示一组输入数据 a1 = nonlin(np.dot(a0,theta0)) #a0与theta0的相乘得到的就是z1,经过sigmod函数就是a1了。a1是4*4的矩阵。注意是批量运算,a1的每一行代表一组训练数据。 a2 = nonlin(np.dot(a1,theta1)) #跟上一个语句一样的道理,a2是一个4*1的矩阵,每一行代表一组训练数据 E = y - a2 #获得偏差E,4*1的矩阵,每一行代表一组训练数据 if (j% 10000) == 0: print "Error:" + str(np.mean(np.abs(E))) a2_delta = E*nonlin(a2,deriv=True) #这才是点乘,对应元素相乘,a2_delta是一个4*1的矩阵,每一行代表一组训练数据 a1_error = a2_delta.dot(theta1.T) # a1__error其实就是偏差对a1求偏导对应输出层的E,也是每一行代表一组训练数据 a1_delta = a1_error*nonlin(a1,deriv=True) theta1 = theta1 + a1.T.dot(a2_delta) theta0 = theta0 + a0.T.dot(a1_delta)print "output after training:"print a2
代码参考自:http://iamtrask.github.io/2015/07/12/basic-python-network/
阅读全文
0 0
- 机器学习:对于反向传播算法(backpropagation)的理解以及python代码实现
- 机器学习笔记07:神经网络的反向传播(Backpropagation)
- 如何理解反向传播算法(backpropagation)
- 理解反向传播(BackPropagation)算法(之一)
- backpropagation反向传播算法
- [机器学习入门] 李宏毅机器学习笔记-8(Backpropagation;反向传播算法)
- 神经网络的反向传播算法Backpropagation
- 机器学习笔记1:神经网络 反向传播(Backpropagation) week5
- 深度学习笔记三:反向传播(backpropagation)算法
- BackPropagation(BP, 误差反向传播)的一些理解
- 反向传播(backpropagation)算法的多层神经网络训练过程
- 反向传播算法(backPropagation,简称BP算法)
- Ng机器学习课程第五周神经网络反向传播算法课后作业初学者的理解
- 神经网络BP反向传播算法Error Backpropagation
- 反向传播算法(BackPropagation,BP)
- 9-2 backpropagation algorithm 反向传播算法
- 深入浅出BP(BackPropagation)反向传播算法
- 机器学习(九)反向传播算法
- hpuoj 【1341】统计奇偶数 【水题】
- pickle, cPickle 模块:序列化 Python 对象
- JS中client/offset/scroll等的宽高解析
- Java基础笔记整理---【01】cmd操作命令
- guava快速入门
- 机器学习:对于反向传播算法(backpropagation)的理解以及python代码实现
- <Python> Numpy中的矩阵乘法问题
- tomcat服务器安装和启动
- 浅析Java 字节码
- HDU6053(莫比乌斯)
- 再看 唯一分解定理 UVA Choose and divide
- 二分法
- 窗体介绍
- 拖放API中的drag和drop实战