2.2深度学习——初始化模型参数
接下来,我们需要定义一个线性回归模型。线性回归的核心是通过输入特征X和权重w的矩阵乘法,再加上偏置b来计算输出。根据线性回归的公式:其中,X是特征矩阵,w是权重向量,b是偏置。def linreg(X, w, b): # 线性回归模型"""线性回归模型"""在训练过程中,我们需要定义损失函数,以度量模型的预测值与真实值之间的差距。对于线性回归,通常使用均方误差(MSE)作为损失函数,公式为:其中,
2.2.初始化模型参数
在训练线性回归模型之前,我们需要初始化模型的参数,包括权重和偏置。初始化的目的是为模型提供初始的参数值,这些参数将通过训练过程逐步优化。
在本节中,我们通过从均值为0、标准差为0.01的正态分布中随机生成权重w
,并将偏置b
初始化为0。初始化的过程可以用以下代码表示:
import numpy as np
# 初始化权重w和偏置b
w = np.random.normal(0, 0.01, (2, 1)) # 2个输入特征,一个输出
b = np.zeros(1) # 偏置初始化为0
# 为w和b设置梯度属性
w.attach_grad() # 为w启用自动求导功能
b.attach_grad() # 为b启用自动求导功能
代码解释:
w = np.random.normal(0, 0.01, (2, 1))
:这里使用np.random.normal()
从均值为0,标准差为0.01的正态分布中生成一个形状为(2, 1)的随机权重矩阵。这个矩阵包含了两个输入特征的权重。b = np.zeros(1)
:偏置b
初始化为0,表示初始时没有偏移量。w.attach_grad()
和b.attach_grad()
:这两行代码为w
和b
启用自动微分,意味着在后续的反向传播过程中,框架会自动计算这些参数的梯度。
2.2.4 定义模型
接下来,我们需要定义一个线性回归模型。线性回归的核心是通过输入特征X
和权重w
的矩阵乘法,再加上偏置b
来计算输出。根据线性回归的公式:
[y = Xw + b]
其中,X
是特征矩阵,w
是权重向量,b
是偏置。
def linreg(X, w, b): # 线性回归模型
"""线性回归模型"""
return np.dot(X, w) + b
代码解释:
np.dot(X, w)
:计算特征矩阵X
与权重向量w
的矩阵乘法。+ b
:将偏置b
加到每个预测值上。根据广播机制,b
会被加到Xw
的每一行。
2.2.5 定义损失函数
在训练过程中,我们需要定义损失函数,以度量模型的预测值与真实值之间的差距。对于线性回归,通常使用均方误差(MSE)作为损失函数,公式为:
[\text{MSE}(y_{\hat}, y) = \frac{1}{2} \sum_{i=1}^{n} (y_{\hat_i} - y_i)^2]
其中,y_hat
是模型的预测值,y
是实际的目标值。
def squared_loss(y_hat, y): # 均方损失函数
"""均方损失"""
return (y_hat - y.reshape(y_hat.shape)) ** 2 / 2 # 计算均方损失
代码解释:
y.reshape(y_hat.shape)
:将真实值y
的形状调整为与预测值y_hat
相同,以便进行逐元素的运算。(y_hat - y.reshape(y_hat.shape)) ** 2 / 2
:计算均方误差损失,其中每个样本的损失值是预测值与真实值之差的平方,除以2是为了简化求导过程。
2.2.6 定义优化算法
在训练模型时,我们需要使用优化算法来更新模型参数。这里我们使用**小批量随机梯度下降(SGD)**算法。SGD是深度学习中最常用的优化算法之一,它通过计算每个小批量的损失函数的梯度,然后根据梯度更新模型的参数。
小批量随机梯度下降(SGD)算法
实现代码如下:
def sgd(params, lr, batch_size): # 小批量随机梯度下降
"""小批量随机梯度下降"""
for param in params: # 遍历每个参数(权重w和偏置b)
param[:] = param - lr * param.grad / batch_size # 更新参数
代码解释:
params
:一个包含模型所有参数(即w
和b
)的列表。lr
:学习率,控制每次更新的步长。batch_size
:小批量的大小,用于归一化梯度。param[:]
:表示直接修改参数的值。param.grad
:获取当前参数的梯度。lr * param.grad / batch_size
:根据梯度更新参数的值,乘以学习率并归一化。
总结
本节介绍了如何初始化模型参数、定义模型、定义损失函数和实现优化算法。通过这些步骤,我们可以构建一个线性回归模型,并使用小批量随机梯度下降(SGD)算法来训练模型。训练过程中,模型的参数会逐步更新,直到它们足够拟合训练数据。
更多推荐
所有评论(0)