📜  神经网络如何工作 (1)

📅  最后修改于: 2023-12-03 15:27:18.969000             🧑  作者: Mango

神经网络如何工作

神经网络是一种模拟人脑神经元工作方式的算法模型,通过学习样本数据中的特征和模式来实现各种机器学习任务。本篇文章将介绍神经网络的工作原理,帮助程序员了解它如何发挥作用。

神经元和神经网络

神经元是神经网络的基本单位,类似于人类神经系统中的单个神经元。每个神经元有多个输入和一个输出,在神经网络中,输入是通过权重连接的其他神经元的输出。每个神经元也有一个激活函数,该函数将加权和传递给输出。

神经网络是神经元的组合,由输入层、隐藏层和输出层组成。输入层接收来自外界的数据,每个输入对应一个神经元。隐藏层是中间层,它的神经元会接收来自上一层的数据,执行一些计算,再将输出传递给下一层。输出层是神经网络的最后一层,它为所有神经元的输出提供结果。

前向传播

前向传播是神经网络执行的第一步,从输入层开始正向传递计算每个神经元的输出。在此过程中,每个神经元将接收由前一层传递来的输入,加权并激活输出传递给下一层。前向传播将循环执行,直到计算出输出层的输出。


def forward_propagation(inputs, weights, biases):
    layer_output = inputs
    for i in range(len(weights)):
        layer_input = layer_output
        layer_output = activation(np.dot(layer_input, weights[i]) + biases[i])
    return layer_output

反向传播

反向传播是指神经网络的训练过程,它主要用于调整神经元的权重和偏置,以优化神经网络在任务的准确性。在反向传播算法中,梯度下降被用于优化神经元的参数。首先,正向传递计算输出层的误差,然后使用链式法则计算误差梯度。利用梯度下降算法调整权重和偏差,反向传递误差并更新神经元。


def back_propagation(inputs, weights, biases, targets):
    # forward propagation
    layer_outputs = [inputs]
    for i in range(len(weights)):
        layer_input = layer_outputs[-1]
        layer_output = activation(np.dot(layer_input, weights[i]) + biases[i])
        layer_outputs.append(layer_output)

    # backward propagation
    error = targets - layer_outputs[-1]
    delta = error * derivative(layer_outputs[-1])
    for i in range(len(weights) - 1, -1, -1):
        error = delta.dot(weights[i].T)
        delta = error * derivative(layer_outputs[i])
        weights[i] += layer_outputs[i].T.dot(delta)
        biases[i] += np.sum(delta, axis=0, keepdims=True)

    return error

激活函数

在神经元中,激活函数是用于控制输出范围的函数。它通过数学运算将输入转换为输出。传统的激活函数包括sigmoid函数、tanh函数和ReLU函数等。尽管每种激活函数都有优点和缺点,但通常情况下,ReLU是最常用的激活函数。


def activation(z):
    return np.maximum(z, 0)

def derivative(z):
    return 1.0 * (z > 0)

总结

神经网络是一种强大的机器学习方法,它可以用于分类、回归、聚类等许多不同的任务领域。理解神经网络的工作原理可以帮助程序员设计和构建更高效的神经网络,并在项目中实现更好的结果。