欢迎访问宙启技术站
智能推送

使用Python实现Sigmoid函数的梯度下降法

发布时间:2023-12-11 04:53:56

Sigmoid函数是一个常用的非线性激活函数,常用于神经网络中。它的形式为1 / (1 + e^(-x)),其中x是输入值。

梯度下降是一种常用的优化算法,用于最小化目标函数的值。在神经网络的训练中,我们需要通过梯度下降来更新网络的参数,使得损失函数的值最小化。下面我将使用Python来实现Sigmoid函数的梯度下降法,并提供一个简单的例子来说明如何使用。

首先,我们需要导入必要的库:

import numpy as np
import matplotlib.pyplot as plt

接下来,我们定义Sigmoid函数及其导数:

def sigmoid(x):
    return 1 / (1 + np.exp(-x))

def sigmoid_derivative(x):
    return sigmoid(x) * (1 - sigmoid(x))

然后,我们定义梯度下降函数,用于更新权重参数:

def gradient_descent(x, y, learning_rate, epochs):
    num_features = x.shape[1]
    weights = np.zeros(num_features)
    bias = 0
    loss_history = []

    for i in range(epochs):
        # 计算预测值
        predicted = sigmoid(np.dot(x, weights) + bias)

        # 计算损失函数值
        loss = -np.mean(y * np.log(predicted) + (1 - y) * np.log(1 - predicted))
        loss_history.append(loss)

        # 计算权重参数的梯度
        dw = np.dot(x.T, (predicted - y)) / y.shape[0]
        db = np.mean(predicted - y)

        # 更新权重参数
        weights -= learning_rate * dw
        bias -= learning_rate * db

    return weights, bias, loss_history

最后,我们使用一个简单的例子来说明如何使用梯度下降法来拟合数据:

# 生成随机数据
np.random.seed(0)
x = np.random.randn(100, 2)
y = np.random.randint(0, 2, 100)

# 使用梯度下降法拟合数据
learning_rate = 0.1
epochs = 1000
weights, bias, loss_history = gradient_descent(x, y, learning_rate, epochs)

# 绘制损失函数的变化
plt.plot(range(epochs), loss_history)
plt.xlabel('Epoch')
plt.ylabel('Loss')
plt.show()

上述例子中,我们生成了一个包含2个特征的随机数据集,标签为0或1。然后,我们使用梯度下降法来训练一个模型来预测数据的标签。最后,我们绘制了损失函数随训练轮数的变化曲线。

通过这个例子,我们可以看到梯度下降法的训练过程,并且可以观察到损失函数的逐渐减小。这展示了使用Sigmoid函数和梯度下降法来优化神经网络参数的基本思路。

总结起来,本文介绍了如何使用Python来实现Sigmoid函数的梯度下降法,并给出了一个简单的例子来说明如何使用。这只是一个基础的实现,在实际应用中可能需要进一步优化和修改。希望这篇文章对你有所帮助!