激活函数、向前传播、损失函数、梯度下降

激活函数

作用:主要引入了非线性。从而能解决很复杂的非线性关系。能更好地处理现实世界的数据和任务。

向前传播

向前传播描述了,神经网络中,输入层到输出层的信号传播和处理过程。输入层将特征数据输入,加权求和,然后通过激活函数引入非线性,然后得到输出。输出到隐藏层。
隐藏层的输入就是输入层的输入。隐藏层经过多层传递,最后到输出层。
输出层将隐藏层的输出作为输入。经过加权和偏置,然后求和。然后传递给激活函数,激活函数将数据映射成非线性的。最后输出。输出结果得到的就是预测结果。将预测结果放入损失函数,计算损失值。

损失函数

损失函数就是计算预测值与实际值之间的差距。不同的任务需要使用不同类型的损失函数:
均方误差:回归任务
交叉熵损失:分类任务
对数损失:二分类问题
Hinge loss:衡量分类边界与正确分类间隔的差异。

梯度下降

梯度下降是我们深度学习最常用的优化手段。用于调整模型参数到损失函数值到 最小。主要步骤如下:
1、初始化参数
2、计算损失函数
3、计算梯度
4、调整参数
5、重复迭代,直至损失函数收敛
梯度下降的类型:
1、批量梯度下降:准确,效率低
2、随机梯度下降:不准确,效率高
3、小批量梯度下降:较准确,效率高

### 关于损失函数反向传播的过程、原理及其实现 #### 损失函数的作用及其计算方式 在神经网络中,损失函数用于衡量模型预测值与真实标签之间的差异。对于分类问题,常用的损失函数之一是交叉熵损失函数,在多类分类场景下通常采用softmax加交叉熵的形式[^1]。 #### 反向传播的核心概念 反向传播算法通过计算梯度来更新权重参数,从而最小化损失函数。这一过程中应用了链式法则以高效地求解各层参数相对于最终输出误差的导数[^3]。 #### 计算流程概述 - **前向传递阶段**:输入数据经过每一层节点直至得到输出结果; - **计算损失**:利用选定的损失函数评估当前输出与实际目标间的差距; - **反向传播阶段**:从最后一层开始逐级向前推算每层权值变化对总误差的影响程度;此步涉及大量矩阵运算以及激活函数的一阶导数值; - **参数调整**:依据所获得的梯度信息按照一定策略(如随机梯度下降SGD)修改连接权重和偏置项。 #### Python代码示例展示简单的两层全连接NN中的BP过程 ```python import numpy as np def sigmoid(x): return 1 / (1 + np.exp(-x)) def sigmoid_derivative(x): s = sigmoid(x) return s * (1 - s) class NeuralNetwork: def __init__(self, input_size=2, hidden_size=4, output_size=1): self.weights_input_hidden = np.random.randn(input_size, hidden_size) self.bias_hidden = np.zeros((1, hidden_size)) self.weights_hidden_output = np.random.randn(hidden_size, output_size) self.bias_output = np.zeros((1, output_size)) def forward(self, X): z_hidden = np.dot(X, self.weights_input_hidden) + self.bias_hidden a_hidden = sigmoid(z_hidden) z_output = np.dot(a_hidden, self.weights_hidden_output) + self.bias_output y_pred = sigmoid(z_output) return y_pred, a_hidden def backward(self, X, Y, learning_rate=0.1): m = X.shape[0] # Forward pass y_pred, a_hidden = self.forward(X) # Compute gradients using backpropagation dz_output = y_pred - Y dw_hidden_output = np.dot(a_hidden.T, dz_output) / m db_output = np.sum(dz_output, axis=0, keepdims=True) / m da_hidden = np.dot(dz_output, self.weights_hidden_output.T) dz_hidden = da_hidden * sigmoid_derivative(np.dot(X, self.weights_input_hidden) + self.bias_hidden) dw_input_hidden = np.dot(X.T, dz_hidden) / m db_hidden = np.sum(dz_hidden, axis=0, keepdims=True) / m # Update parameters with gradient descent step self.weights_hidden_output -= learning_rate * dw_hidden_output self.bias_output -= learning_rate * db_output self.weights_input_hidden -= learning_rate * dw_input_hidden self.bias_hidden -= learning_rate * db_hidden nn = NeuralNetwork() X_train = np.array([[0, 0], [0, 1], [1, 0], [1, 1]]) Y_train = np.array([[0], [1], [1], [0]]) for epoch in range(10000): nn.backward(X_train, Y_train) print("Final prediction after training:") y_final, _ = nn.forward(X_train) print(y_final) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值