深度学习入门:从零开始明白神经网络

嚴華  论坛元老 | 2025-2-24 08:50:04 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 1048|帖子 1048|积分 3144

接待来到深度学习的天下!如果你是初学者,可能会对这个领域感到既高兴又有些渺茫。别担心,我会带你一步步走进这个布满魅力的领域。深度学习是人工智能领域的一个重要分支,它通过模拟人脑的神经网络结构来处理数据。深度学习的核心是人工神经网络,它由大量的神经元组成,这些神经元通过复杂的毗连传递和处理信息。
  深度学习在图像识别、语音识别、天然语言处理等领域取得了巨大的成功。例如,智能手机上的语音助手(如Siri和小爱同学)和主动驾驶汽车都依赖于深度学习技术。深度学习的强大之处在于它能够处理复杂的、非线性的数据模式。与传统的机器学习方法相比,深度学习能够主动从数据中提取特征,而无需人工设计复杂的特征工程。
1. 人工智能、机器学习与深度学习的关系

1.1 人工智能(AI)

人工智能是一个广泛的概念,它试图让盘算机模拟人类的智能举动。AI的目的是使盘算机能够执行通常需要人类智能才能完成的任务,如视觉感知、语言明白、决策订定等。
1.2 机器学习(ML)

机器学习是人工智能的一个子领域,它通过算法让盘算机从数据中学习模式和规律。机器学习的核心是模子,即通过数据训练得到的数学模子,用于对新数据进行预测或分类。机器学习分为监视学习、无监视学习和强化学习。
1.3 深度学习(DL)

深度学习是机器学习的一个分支,它通过构建深度神经网络来处理复杂的任务。深度学习的核心是人工神经网络,它由大量的神经元组成,这些神经元通过复杂的毗连传递和处理信息。深度学习在图像识别、语音识别、天然语言处理等领域取得了显著的结果。

2. 深度学习的应用场景

深度学习在许多领域都取得了显著的结果,以下是一些典范的应用场景:
2.1 图像识别

深度学习模子可以主动识别图像中的物体、场景和人脸。例如,主动驾驶汽车通过深度学习模子识别道路、车辆和行人。深度学习在医学影像分析中也有广泛应用,例如通过分析X光、CT和MRI图像辅助医生进行疾病诊断。
2.2 语音识别

深度学习模子可以将语音信号转换为笔墨,广泛应用于语音助手和语音输入设备。例如,Siri和小爱同学通过深度学习模子明白用户的语音指令并提供相应的服务。
2.3 天然语言处理

深度学习模子可以明白和生整天然语言,应用于机器翻译、情感分析和问答体系。例如,Google Translate通过深度学习模子实现多种语言之间的正确翻译。
2.4 医疗康健

深度学习模子可以分析医学影像,辅助医生进行疾病诊断。例如,通过分析X光、CT和MRI图像,深度学习模子可以快速检测出病变地区,为医生提供辅助诊断发起。
2.5 金融领域

深度学习模子可以用于风险评估、投资决策和欺诈检测。例如,通过分析客户的光荣记录和交易举动,深度学习模子可以评估客户的光荣风险和违约风险。

3. 神经网络的基本结构

神经网络是深度学习的核心工具。它由多个神经元组成,这些神经元通过复杂的毗连传递和处理信息。一个简朴的神经网络通常由以下几部门组成:

  • 输入层(Input Layer):接收数据的入口。输入层的神经元数目通常与数据的特征数目同等。
  • 隐藏层(Hidden Layer):网络的核心部门,用于提取数据的特征。隐藏层可以有多个,深度学习中的“深度”就是指隐藏层的数目。
  • 输出层(Output Layer):给出终极的预测结果。输出层的神经元数目通常与任务的目的数目同等(例如,分类任务中,输出层的神经元数目等于类别数目)。
3.1 神经元的工作原理

神经元是神经网络的基本单位。它接收多个输入信号,通过加权求和和激活函数处理后,输出一个信号。激活函数的作用是非线性化,使得神经网络能够处理复杂的模式。

激活函数的选择对神经网络的性能至关重要。常用的激活函数包括:


  • Sigmoid函数:将输出限定在0到1之间,常用于二分类标题。
  • ReLU函数(Rectified Linear Unit):将负值置为0,保存正值,盘算简朴且能有效缓解梯度消失标题。
  • Tanh函数:将输出限定在-1到1之间,输出范围更对称。
3.2 神经网络的前向传播

神经网络的工作原理是通过输入层接收数据,颠末隐藏层的特征提取,终极在输出层给出预测结果。这个过程称为前向传播。前向传播的过程可以用数学公式表现如下:


4. 神经网络的训练过程

神经网络的训练过程是一个优化标题,目的是通过调整模子的参数(权重和偏置),使得模子在训练数据上的损失函数最小化。损失函数权衡了模子的预测值与真实值之间的差异。常用的损失函数包括:


  • 均方误差(MSE):用于回归标题,盘算预测值与真实值之间的平方差。
  • 交织熵损失(Cross-Entropy Loss):用于分类标题,权衡预测概率分布与真实概率分布之间的差异。
    训练过程通常包括以下步骤:

  • 前向传播:从输入层到输出层盘算模子的预测值。
  • 盘算损失:通过损失函数盘算预测值与真实值之间的差异。
  • 反向传播:通过盘算损失函数对每个参数的梯度,更新权重和偏置。
  • 优化:使用优化算法(如梯度下降)调整参数,以最小化损失函数。
    4.1 损失函数
    损失函数是权衡模子预测值与真实值之间差异的函数。常用的损失函数包括:

4.2 反向传播

反向传播是神经网络训练的核心算法。它的目的是通过盘算损失函数对每个参数的梯度,更新权重和偏置。反向传播的过程可以用数学公式表现如下:
假设损失函数为 L,则反向传播的过程可以表现为:

4.3 优化算法

优化算法用于调整神经网络的参数,以最小化损失函数。常用的优化算法包括:



  • 随机梯度下降(Stochastic Gradient Descent, SGD):每次只用一个样本盘算梯度,更新参数。这种方法盘算速度快,但收敛过程可能不稳定。
  • 批量梯度下降(Batch Gradient Descent):用全部样本盘算梯度,更新参数。这种方法盘算精度高,但盘算速度慢。
  • 小批量梯度下降(Mini-Batch Gradient Descent):每次用一小批样本盘算梯度,更新参数。这种方法结合了随机梯度下降和批量梯度下降的优点,盘算速度较快且收敛过程稳定。
5. 代码示例:构建一个简朴的神经网络

现在我们已经相识了神经网络的基本原理,接下来我们将通过代码实现一个简朴的神经网络。我们将使用Python和NumPy来构建一个两层的神经网络,并用它解决一个简朴的分类标题。
5.1 标题描述

我们将解决一个简朴的二分类标题:异或标题(XOR)。异或标题是一个经典的非线性标题,输入为两个二进制值,输出为它们的异或结果。

5.2 代码实现

  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 SimpleNeuralNetwork:
  9.     def __init__(self, input_size, hidden_size, output_size):
  10.         # 初始化权重和偏置
  11.         self.weights_input_to_hidden = np.random.rand(input_size, hidden_size)
  12.         self.weights_hidden_to_output = np.random.rand(hidden_size, output_size)
  13.         self.bias_hidden = np.zeros((1, hidden_size))
  14.         self.bias_output = np.zeros((1, output_size))
  15.     def forward(self, inputs):
  16.         # 前向传播
  17.         self.hidden_layer = sigmoid(np.dot(inputs, self.weights_input_to_hidden) + self.bias_hidden)
  18.         self.output_layer = sigmoid(np.dot(self.hidden_layer, self.weights_hidden_to_output) + self.bias_output)
  19.         return self.output_layer
  20.     def train(self, inputs, targets, learning_rate):
  21.         # 前向传播
  22.         output = self.forward(inputs)
  23.         # 计算误差
  24.         error = targets - output
  25.         # 反向传播
  26.         d_output = error * sigmoid_derivative(output)
  27.         error_hidden = d_output.dot(self.weights_hidden_to_output.T)
  28.         d_hidden = error_hidden * sigmoid_derivative(self.hidden_layer)
  29.         # 更新权重和偏置
  30.         self.weights_hidden_to_output += self.hidden_layer.T.dot(d_output) * learning_rate
  31.         self.weights_input_to_hidden += inputs.T.dot(d_hidden) * learning_rate
  32.         self.bias_hidden += np.sum(d_hidden, axis=0, keepdims=True) * learning_rate
  33.         self.bias_output += np.sum(d_output, axis=0, keepdims=True) * learning_rate
  34. # 创建神经网络
  35. nn = SimpleNeuralNetwork(input_size=2, hidden_size=3, output_size=1)
  36. # 训练数据
  37. inputs = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])
  38. targets = np.array([[0], [1], [1], [0]])
  39. # 训练过程
  40. for epoch in range(10000):
  41.     nn.train(inputs, targets, learning_rate=0.1)
  42.     # 每隔1000次打印一次损失
  43.     if epoch % 1000 == 0:
  44.         output = nn.forward(inputs)
  45.         loss = np.mean(np.square(targets - output))
  46.         print(f"Epoch {epoch}: Loss = {loss:.6f}")
  47. # 测试
  48. print("训练后的输出:")
  49. print(nn.forward(inputs))
复制代码
5.3 输出结果

  1. Epoch 0: Loss = 0.246123
  2. Epoch 1000: Loss = 0.000213
  3. Epoch 2000: Loss = 0.000106
  4. ...
  5. 训练后的输出:
  6. [[0.01335]
  7. [0.9867 ]
  8. [0.9867 ]
  9. [0.01335]]
复制代码
6. 小结

通过上面的代码,我们构建了一个简朴的两层神经网络,并用它解决了异或标题(XOR)。这是一个经典的非线性标题,展示了神经网络的强大本领。在本篇文章中,我们具体介绍了神经网络的基本结构、训练过程以及怎样通过代码实现一个简朴的神经网络。
盼望这篇文章能资助你更好地明白深度学习的基本概念。在下一篇文章中,我们将进一步深入,使用深度学习框架(如TensorFlow或PyTorch)构建更复杂的神经网络,并应用于实际标题。

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

本帖子中包含更多资源

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

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

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

本版积分规则

嚴華

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表