从零搭建神经网络解决异或问题
PS: 本篇文章不涉及调用任何有关机器学习的库,例如TensorFlow,Pytorch等
- 通过阅读本篇文章,你可能收获如下:
- 了解神经网络的结构
- 理解前向传播和反向传播的本质
- 理解激活函数的意义以及它在反向传播中的作用
数据集
很简单就四个数据点 (x,y) label
- (0,0) 0
- (1,0) 1
- (0,1) 1
- (0,0) 0
网络结构
由于单层神经网络不能解决2维异或问题,所以设计含1层隐藏层的神经网络

n1=w11∗I1+w21∗I2+b1(1) n_1 = w_{11}*I_1+w_{21}*I_2 + b_1 \tag{1} n1=w11∗I1+w21∗I2+b1(1)
n3=w12∗I1+w22∗I2+b2(2) n_3 = w_{12}*I_1+w_{22}*I_2 +b_2 \tag{2} n3=w12∗I1+w22∗I2+b2(2)
n2=tanh(n1)(3) n_2=tanh(n1) \tag{3} n2=tanh(n1)(3)
n4=tanh(n3)(4) n_4=tanh(n3) \tag{4} n4=tanh(n3)(4)
n5=w3∗n2+w4∗n4+b3(5) n_5=w_3*n_2+w_4*n_4+b_3 \tag{5} n5=w3∗n2+w4∗n4+b3(5)
n6=sigmoid(n5)(6) n_6=sigmoid(n_5) \tag{6} n6=sigmoid(n5)(6)
- 这里给出激活函数的求导性质(后面要用到)
{ f(x)=sigmoid(x)f(x)′=f(x)(1−f(x))(7) \left\{\begin{matrix}f(x)=sigmoid(x)\\f(x)'=f(x)(1-f(x))\end{matrix}\right. \tag{7} { f(x)=sigmoid(x)f(x)′=f(x)(1−f(x))(7)
{ g(x)=tanh(x)g(x)′=1−g(x)2(8) \left\{\begin{matrix}g(x)=tanh(x)\\g(x)'=1-g(x)^2\end{matrix}\right. \tag{8} { g(x)=tanh(x)g(x)′=1−g(x)2(8)
前向传播和反向传播
- 前向传播很好理解,就是给定输入和神经网络,得到输出的过程,在这里就是给定 I1I_1I1 和 I2I_2I2 得到 n6n_6n6 的过程,具体计算过程已经由上面公式给出
- 下面重点介绍反向传播
- 首先给出损失函数的定义
loss=(n6−label)2(9) loss = (n_6-label)^2 \tag{9} loss=(n6−label)2(9)</
- 首先给出损失函数的定义

本文详细介绍了如何从头开始构建一个简单的神经网络来解决异或问题,包括网络结构设计、前向传播与反向传播原理,以及关键的权重更新过程。通过实例演示了如何利用tanh和sigmoid激活函数,并展示了学习率调整策略。
最低0.47元/天 解锁文章
1392

被折叠的 条评论
为什么被折叠?



