返回教程中心

深度学习技术

深度学习技术介绍和基础教程

ai-advance高级

深度学习(Deep Learning)是机器学习的一个重要分支,基于 人工神经网络(Artificial Neural Networks, ANN)构建。它通过模拟人脑的神经网络来处理复杂的数据,广泛应用于图像识别、自然语言处理、自动驾驶等领域。

1. 神经网络基础

1.1 什么是神经网络?

神经网络是一种模拟人脑神经元结构的数学模型,核心思想是通过多层神经元的连接和训练来学习数据的特征和映射关系。

神经网络的组成:

  1. 输入层:接收输入数据(特征)。
  2. 隐藏层:通过权重和激活函数对数据进行处理。
  3. 输出层:输出预测结果。

神经网络的数学表示:

对于一个简单的神经元:

y=f(w1x1+w2x2++wnxn+b)y = f(w_1x_1 + w_2x_2 + \dots + w_nx_n + b)

其中:

  • xx:输入
  • ww:权重
  • bb:偏置
  • ff:激活函数
  • yy:输出

1.2 激活函数

激活函数用于引入非线性,使神经网络能够拟合复杂的映射关系。

常见的激活函数包括:

  • Sigmoidf(x)=11+exf(x) = \frac{1}{1 + e^{-x}}
  • ReLUf(x)=max(0,x)f(x) = \max(0, x)
  • Tanhf(x)=exexex+exf(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}}

示例代码:

import numpy as np

def sigmoid(x):
    return 1 / (1 + np.exp(-x))

def relu(x):
    return np.maximum(0, x)

x = np.array([-2, -1, 0, 1, 2])
print("Sigmoid:", sigmoid(x))
print("ReLU:", relu(x))

2. 反向传播(Backpropagation)

反向传播是训练神经网络的核心算法,通过 梯度下降 来更新权重,使得模型预测误差最小化。

2.1 训练过程

  1. 前向传播:计算神经网络的输出。
  2. 计算损失:通过损失函数(如均方误差、交叉熵)衡量输出与真实值之间的差距。
  3. 反向传播:计算损失函数对每个权重的梯度,使用链式法则传播误差信号。
  4. 权重更新:使用优化算法(如梯度下降)更新权重和偏置。

2.2 示例:简单神经网络的训练

import numpy as np

def sigmoid(x):
    return 1 / (1 + np.exp(-x))

def sigmoid_derivative(x):
    return x * (1 - x)

inputs = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])
outputs = np.array([[0], [1], [1], [0]])  # XOR 问题

np.random.seed(42)
weights = np.random.random((2, 1)) - 0.5
bias = np.random.random(1) - 0.5

learning_rate = 0.1
for epoch in range(10000):
    z = np.dot(inputs, weights) + bias
    predictions = sigmoid(z)

    error = outputs - predictions
    d_weights = np.dot(inputs.T, error * sigmoid_derivative(predictions))
    d_bias = np.sum(error * sigmoid_derivative(predictions))

    weights += learning_rate * d_weights
    bias += learning_rate * d_bias

print("训练后的权重:", weights)
print("训练后的偏置:", bias)

3. 常见模型

3.1 卷积神经网络(CNN)

卷积神经网络(Convolutional Neural Network, CNN)专门用于处理 图像数据,通过 卷积层池化层 提取图像的空间特征。

CNN的结构:

  1. 卷积层:通过卷积核(滤波器)提取特征。
  2. 池化层:对特征图进行降维,减少计算量(如最大池化)。
  3. 全连接层:将特征图展开为向量并用于最终分类。

CNN 示例:手写数字识别(MNIST)

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense
from tensorflow.keras.datasets import mnist
from tensorflow.keras.utils import to_categorical

(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train = x_train.reshape(-1, 28, 28, 1) / 255.0
x_test = x_test.reshape(-1, 28, 28, 1) / 255.0
y_train = to_categorical(y_train)
y_test = to_categorical(y_test)

model = Sequential([
    Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=(28, 28, 1)),
    MaxPooling2D(pool_size=(2, 2)),
    Flatten(),
    Dense(128, activation='relu'),
    Dense(10, activation='softmax')
])

model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
model.fit(x_train, y_train, epochs=5, batch_size=32, validation_data=(x_test, y_test))

3.2 循环神经网络(RNN)

循环神经网络(Recurrent Neural Network, RNN)用于处理 序列数据,例如自然语言处理和时间序列预测。

RNN 特点:

  • 具有 记忆能力,能够处理上下文信息。
  • 通过隐藏状态循环传递信息。

RNN 示例:简单文本分类

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import SimpleRNN, Dense, Embedding
from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences

texts = ["I love deep learning", "This is a great tutorial"]
labels = [1, 0]  # 1 表示正面情绪,0 表示负面情绪

tokenizer = Tokenizer(num_words=1000)
tokenizer.fit_on_texts(texts)
sequences = tokenizer.texts_to_sequences(texts)
data = pad_sequences(sequences, maxlen=5)

model = Sequential([
    Embedding(input_dim=1000, output_dim=32, input_length=5),
    SimpleRNN(32),
    Dense(1, activation='sigmoid')
])

model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
model.fit(data, labels, epochs=5, batch_size=2)

4. 总结

在本教程中,我们学习了深度学习的基础知识,包括:

  • 神经网络 的组成和原理。
  • 反向传播 的核心概念及实现。
  • 卷积神经网络(CNN)循环神经网络(RNN) 的原理与应用。

通过练习示例代码,你可以快速掌握深度学习的基本技能,并为进一步学习高级模型(如 Transformer、GAN 等)打下基础。


上一篇
没有更多教程
下一篇
AI基础入门
AI基础