深度学习(Deep Learning)是机器学习的一个分支,它试图使用类似人脑的结构来学习数据。深度学习通过神经网络学习多层抽象表示来实现自动特征构造。
深度学习的主要组件有:
- 神经网络:模拟人脑神经网络的结构,由输入层、隐藏层和输出层组成。每个层由多个节点(神经元)组成,节点之间有权重相连。
- 训练数据:用来训练神经网络的示例数据。训练数据越大规模,训练效果越好。
- 激活函数:在每个节点定义的函数,用于决定节点输出值。常用的有ReLU、Sigmoid、Softmax等。
- 损失函数:用来评估网络预测输出和真实标签的差距。常用的有交叉熵、均方误差等。
- 优化算法:用来不断调整网络权重和减小损失函数。常用的有梯度下降、RMSprop、Adam等。
- 卷积层:一种神经网络层,用在图像处理。能够提取图像的空间特征。
- 池化层:一种神经网络层,主要用于缩小特征图的大小,保留主要特征。
神经网络的训练过程是:
- 初始化网络权重
- 提供训练数据进行前向传播,计算预测输出
- 根据损失函数计算预测输出和真实标签的差距(误差)
- 使用优化算法根据误差调整权重,进行反向传播
- 重复2-4步,直到误差最小化或达到最大迭代次数
下面是一个简单的神经网络代码示例:
import numpy as np
# 定义激活函数
def sigmoid(x):
return 1 / (1 + np.exp(-x))
# 定义损失函数
def mse(y_true, y_pred):
return np.mean(np.power(y_true - y_pred, 2))
# 定义神经网络
def neural_network(x, y):
# 定义网络层数和节点个数
input_nodes = 3
hidden_nodes = 4
output_nodes = 2
# 初始化权重
wih = np.random.rand(input_nodes, hidden_nodes)
whh = np.random.rand(hidden_nodes, hidden_nodes)
who = np.random.rand(hidden_nodes, output_nodes)
# 训练数据次数
iterations = 1000
# 学习率
lr = 0.05
# 训练循环
for i in range(iterations):
# 前向传播
h_input = np.dot(x, wih)
h_hidden = sigmoid(h_input)
h_hidden_2 = sigmoid(np.dot(h_hidden, whh))
output = sigmoid(np.dot(h_hidden_2, who))
# 计算损失
loss = mse(y, output)
# 反向传播
# 输出层误差
error_output = y - output
# 隐藏层2误差
error_hidden_2 = np.dot(error_output, who.T) * h_hidden_2 * (1 - h_hidden_2)
# 隐藏层1误差
error_hidden = np.dot(error_hidden_2, whh.T) * h_hidden * (1 - h_hidden)
# 更新权重
who += lr * np.dot(h_hidden_2.T, error_output)
whh += lr * np.dot(h_hidden.T, error_hidden_2)
wih += lr * np.dot(x.T, error_hidden)
return output
if __name__ == "__main__":
# 输入样本
x = np.array([[0, 0, 1], [0, 1, 1], [1, 0, 1], [1, 1, 1]])
# 标签
y = np.array([[1, 0], [0, 1], [0, 1], [1,0]])
# 训练网络
output = neural_network(x, y)
print(output)