什么是深度学习?

深度学习(Deep Learning)是机器学习的一个分支,它试图使用类似人脑的结构来学习数据。深度学习通过神经网络学习多层抽象表示来实现自动特征构造。

深度学习的主要组件有:

  • 神经网络:模拟人脑神经网络的结构,由输入层、隐藏层和输出层组成。每个层由多个节点(神经元)组成,节点之间有权重相连。
  • 训练数据:用来训练神经网络的示例数据。训练数据越大规模,训练效果越好。
  • 激活函数:在每个节点定义的函数,用于决定节点输出值。常用的有ReLU、Sigmoid、Softmax等。
  • 损失函数:用来评估网络预测输出和真实标签的差距。常用的有交叉熵、均方误差等。
  • 优化算法:用来不断调整网络权重和减小损失函数。常用的有梯度下降、RMSprop、Adam等。
  • 卷积层:一种神经网络层,用在图像处理。能够提取图像的空间特征。
  • 池化层:一种神经网络层,主要用于缩小特征图的大小,保留主要特征。

神经网络的训练过程是:

  1. 初始化网络权重
  2. 提供训练数据进行前向传播,计算预测输出
  3. 根据损失函数计算预测输出和真实标签的差距(误差)
  4. 使用优化算法根据误差调整权重,进行反向传播
  5. 重复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)