当前位置:   article > 正文

双层神经网络实现非线性回归——机器学习_双层神经网络算法

双层神经网络算法

目录

一、算法思想

二、算法原理

三、算法分析

四、源程序代码

五、运行结果及分析


一、算法思想


        在两层神经网络之间,必须有激活函数连接,从而加入非线性因素,提高神经网络的能力。所以,我们先从激活函数学起,一类是挤压型的激活函数,常用于简单网络的学习;另一类是半线性的激活函数,常用于深度网络的学习。

        万能近似定理,是深度学习最根本的理论依据。

        万能近似定理声明了在给定网络具有足够多的隐藏单元的条件下,配备一个线性输出层和一个带有任何挤压性质的激活函数的隐藏层的前馈神经网络,能够以任何想要的误差量近似任何从一个有限维度的空间映射到到另一个有限维度空间的可测的函数。

二、算法原理


        激活函数决定是否传递信号。在这种情况下,只需要带有一个参数(阈值)的简单阶梯函数。

 

 

        一般而言,我们构造的模型都是线性的,但是在实际应用过程中,遇到的很多问题其实是非线性的,这个时候,就需要在模型中应用激活函数,从而提高模型的性能。

激活函数优点:可以将连续值映射到01之间,将问题转化为概率问题,值大于0.5时是正例。
激活函数缺点:可能导致梯度消失和梯度爆炸问题;因为其中含有幂运算,所以计算机处理时会很耗时。

三、算法分析


 首先明确两点:

(1)前向传播求损失,反向传播回传误差。

(2)每个神经元都可以根据误差修正权重。

神经网络前向算法:

前向算法的作用是计算输入层结点对隐藏层结点的影响,

也就是说,神经网络前向算法网络正向的走一遍:输入层->隐藏层->输出层

神经网络反向推导:

(1)计算总误差

(2)隐藏层的权重更新

(3)更新权重

四、源程序代码


  1. import numpy as np
  2. def sigmoid(x):
  3. return 1 / (1 + np.exp(-x))
  4. def deriv_sigmoid(x):
  5. fx = sigmoid(x)
  6. return fx * (1 - fx)
  7. def mse_loss(y_true, y_pred):
  8. return ((y_true - y_pred) ** 2).mean()
  9. class OurNeuralNetwork:
  10. def __init__(self):
  11. self.w1 = np.random.normal()
  12. self.w2 = np.random.normal()
  13. self.w3 = np.random.normal()
  14. self.w4 = np.random.normal()
  15. self.w5 = np.random.normal()
  16. self.w6 = np.random.normal()
  17. self.b1 = np.random.normal()
  18. self.b2 = np.random.normal()
  19. self.b3 = np.random.normal()
  20. def feedforward(self, x):
  21. h1 = sigmoid(self.w1 * x[0] + self.w2 * x[1] + self.b1)
  22. h2 = sigmoid(self.w3 * x[0] + self.w4 * x[1] + self.b2)
  23. o1 = sigmoid(self.w5 * h1 + self.w6 * h2 + self.b3)
  24. return o1
  25. def train(self, data, all_y_trues):
  26. learn_rate = 0.1
  27. epochs = 1000 # 遍历整个数据集的次数
  28. for epoch in range(epochs):
  29. for x, y_true in zip(data, all_y_trues):
  30. # --- 做一个前馈(稍后我们将需要这些值)
  31. sum_h1 = self.w1 * x[0] + self.w2 * x[1] + self.b1
  32. h1 = sigmoid(sum_h1)
  33. sum_h2 = self.w3 * x[0] + self.w4 * x[1] + self.b2
  34. h2 = sigmoid(sum_h2)
  35. sum_o1 = self.w5 * h1 + self.w6 * h2 + self.b3
  36. o1 = sigmoid(sum_o1)
  37. y_pred = o1
  38. d_L_d_ypred = -2 * (y_true - y_pred)
  39. d_ypred_d_w5 = h1 * deriv_sigmoid(sum_o1)
  40. d_ypred_d_w6 = h2 * deriv_sigmoid(sum_o1)
  41. d_ypred_d_b3 = deriv_sigmoid(sum_o1)
  42. d_ypred_d_h1 = self.w5 * deriv_sigmoid(sum_o1)
  43. d_ypred_d_h2 = self.w6 * deriv_sigmoid(sum_o1)
  44. d_h1_d_w1 = x[0] * deriv_sigmoid(sum_h1)
  45. d_h1_d_w2 = x[1] * deriv_sigmoid(sum_h1)
  46. d_h1_d_b1 = deriv_sigmoid(sum_h1)
  47. # Neuron h2
  48. d_h2_d_w3 = x[0] * deriv_sigmoid(sum_h2)
  49. d_h2_d_w4 = x[1] * deriv_sigmoid(sum_h2)
  50. d_h2_d_b2 = deriv_sigmoid(sum_h2)
  51. self.w1 -= learn_rate * d_L_d_ypred * d_ypred_d_h1 * d_h1_d_w1
  52. self.w2 -= learn_rate * d_L_d_ypred * d_ypred_d_h1 * d_h1_d_w2
  53. self.b1 -= learn_rate * d_L_d_ypred * d_ypred_d_h1 * d_h1_d_b1
  54. self.w3 -= learn_rate * d_L_d_ypred * d_ypred_d_h2 * d_h2_d_w3
  55. self.w4 -= learn_rate * d_L_d_ypred * d_ypred_d_h2 * d_h2_d_w4
  56. self.b2 -= learn_rate * d_L_d_ypred * d_ypred_d_h2 * d_h2_d_b2
  57. self.w5 -= learn_rate * d_L_d_ypred * d_ypred_d_w5
  58. self.w6 -= learn_rate * d_L_d_ypred * d_ypred_d_w6
  59. self.b3 -= learn_rate * d_L_d_ypred * d_ypred_d_b3
  60. if epoch % 100 == 0:
  61. y_preds = np.apply_along_axis(self.feedforward, 1, data)
  62. loss = mse_loss(all_y_trues, y_preds)
  63. print("训练 %d 次模型错误率: %.3f" % (epoch, loss))
  64. data = np.array([
  65. [-2, -1], # Alice
  66. [25, 6], # Bob
  67. [17, 4], # Charlie
  68. [-15, -6], # Diana
  69. ])
  70. all_y_trues = np.array([
  71. 1, # Alice
  72. 0, # Bob
  73. 0, # Charlie
  74. 1, # Diana
  75. ])
  76. network = OurNeuralNetwork()
  77. network.train(data, all_y_trues)
  78. import matplotlib.pyplot as plt
  79. import numpy as np
  80. x=np.linspace(-10,10)
  81. y_sigmoid=1/(1+np.exp(-x))
  82. plt.plot(x,y_sigmoid,'r-')
  83. plt.title('sigmoid')
  84. plt.show()

五、运行结果及分析


 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/123455
推荐阅读
相关标签
  

闽ICP备14008679号