人工智能中神经网络是如何举行学习的

打印 上一主题 下一主题

主题 977|帖子 977|积分 2933


前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,不由得分享一下给大家。点击跳转到网站。https://www.captainbed.cn/north


  
引言

神经网络的学习过程是通过调解网络中的参数(权重和偏置)来最小化猜测效果与真实值之间的误差。这一过程通常被称为练习,其核心是反向传播算法(Backpropagation)。本文将详细介绍神经网络的学习过程,包罗反向传播的原理、梯度下降优化方法,并通过代码和流程图帮助读者更好地理解。

神经网络的学习过程

神经网络的学习过程可以分为以下几个步骤:

  • 前向传播:输入数据通过神经网络,得到猜测效果。
  • 计算损失:通过损失函数衡量猜测效果与真实值之间的误差。
  • 反向传播:计算损失函数对每个参数的梯度。
  • 参数更新:使用梯度下降法更新网络的权重和偏置。
  • 重复迭代:重复上述步骤,直到损失函数收敛或达到预定的练习次数。
下面我们将逐步展开这些步骤。

1. 前向传播

前向传播是神经网络猜测的过程,输入数据从输入层经过隐蔽层,终极到达输出层。具体过程如下:


  • 输入数据通过权重和偏置举行线性变换。
  • 对线性变换的效果应用激活函数,得到每一层的输出。
  • 终极输出层的输出即为猜测效果。
关于前向传播的详细内容,可以参考上一篇博客《人工智能中神经网络是如何举行猜测的》。

2. 计算损失

损失函数(Loss Function)用于衡量猜测效果与真实值之间的误差。常见的损失函数包罗:


  • 均方误差(MSE):用于回归问题。
  • 交叉熵损失(Cross-Entropy Loss):用于分类问题。
假设我们有一个分类问题,使用交叉熵损失函数,其公式为:


3. 反向传播

反向传播是神经网络学习的核心。其目的是计算损失函数对每个参数的梯度,即损失函数对权重和偏置的偏导数。
反向传播的步骤


  • 计算输出层的误差

  • 计算隐蔽层的误差

  • 计算梯度


4. 参数更新

通过梯度下降法更新网络的参数。梯度下降法的更新公式为:


5. 重复迭代

重复上述步骤,直到损失函数收敛或达到预定的练习次数。

代码实现

下面是一个简单的神经网络练习过程的Python实现,使用NumPy库举行矩阵运算。
  1. import numpy as np
  2. # 定义激活函数及其导数
  3. def sigmoid(x):
  4.     return 1 / (1 + np.exp(-x))
  5. def sigmoid_derivative(x):
  6.     return x * (1 - x)
  7. # 定义神经网络类
  8. class NeuralNetwork:
  9.     def __init__(self, input_size, hidden_size, output_size):
  10.         self.input_size = input_size
  11.         self.hidden_size = hidden_size
  12.         self.output_size = output_size
  13.         
  14.         # 初始化权重和偏置
  15.         self.W1 = np.random.randn(self.input_size, self.hidden_size)
  16.         self.b1 = np.zeros((1, self.hidden_size))
  17.         self.W2 = np.random.randn(self.hidden_size, self.output_size)
  18.         self.b2 = np.zeros((1, self.output_size))
  19.    
  20.     def forward(self, X):
  21.         # 输入层到隐藏层
  22.         self.z1 = np.dot(X, self.W1) + self.b1
  23.         self.a1 = sigmoid(self.z1)
  24.         
  25.         # 隐藏层到输出层
  26.         self.z2 = np.dot(self.a1, self.W2) + self.b2
  27.         self.a2 = sigmoid(self.z2)
  28.         
  29.         return self.a2
  30.    
  31.     def backward(self, X, y, output, learning_rate):
  32.         # 计算输出层的误差
  33.         error = output - y
  34.         d_output = error * sigmoid_derivative(output)
  35.         
  36.         # 计算隐藏层的误差
  37.         error_hidden = np.dot(d_output, self.W2.T)
  38.         d_hidden = error_hidden * sigmoid_derivative(self.a1)
  39.         
  40.         # 更新权重和偏置
  41.         self.W2 -= np.dot(self.a1.T, d_output) * learning_rate
  42.         self.b2 -= np.sum(d_output, axis=0, keepdims=True) * learning_rate
  43.         self.W1 -= np.dot(X.T, d_hidden) * learning_rate
  44.         self.b1 -= np.sum(d_hidden, axis=0, keepdims=True) * learning_rate
  45.    
  46.     def train(self, X, y, epochs, learning_rate):
  47.         for epoch in range(epochs):
  48.             output = self.forward(X)
  49.             self.backward(X, y, output, learning_rate)
  50.             if epoch % 1000 == 0:
  51.                 loss = np.mean(np.square(y - output))
  52.                 print(f"Epoch {epoch}, Loss: {loss}")
  53. # 示例数据
  54. X = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])
  55. y = np.array([[0], [1], [1], [0]])
  56. # 创建神经网络并训练
  57. nn = NeuralNetwork(input_size=2, hidden_size=4, output_size=1)
  58. nn.train(X, y, epochs=10000, learning_rate=0.1)
  59. # 测试
  60. output = nn.forward(X)
  61. print("预测结果:", output)
复制代码

流程图

以下是神经网络学习过程的流程图:
     
总结

神经网络的学习过程是通过前向传播、计算损失、反向传播和参数更新四个步骤不断迭代完成的。反向传播算法是神经网络学习的核心,它通过链式法则计算损失函数对每个参数的梯度,并使用梯度下降法更新参数。本文通过代码和流程图详细表明白这一过程,希望能帮助读者更好地理解神经网络的学习机制。

参考文献


  • Goodfellow, I., Bengio, Y., & Courville, A. (2016). Deep Learning. MIT Press.
  • Nielsen, M. A. (2015). Neural Networks and Deep Learning. Determination Press.


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

南七星之家

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表