Pytorch深度学习(二):梯度下降算法和随机梯度下降

梯度下降算法和随机梯度下降

    • 一、梯度下降算法
      • 1.概念:
      • 2.代码如下:
    • 二、随机梯度下降
      • 1.演变过程
      • 2.代码如下

一、梯度下降算法

1.概念:

梯度下降法简单来说就是一种寻找目标函数最小化的方法。在神经网络中,局部最优点比较小,但是会存在很多的鞍点,即g=0,此时就很难再进行迭代。因此,鞍点是深度学习当中最需要解决的难点。
Pytorch深度学习(二):梯度下降算法和随机梯度下降_第1张图片
计算梯度:
Pytorch深度学习(二):梯度下降算法和随机梯度下降_第2张图片
最后获得更新后的w,其中α是学习率
Pytorch深度学习(二):梯度下降算法和随机梯度下降_第3张图片

2.代码如下:

import numpy as np
import matplotlib.pyplot as plt

x_data = [1.0,2.0,3.0]
y_data = [2.0,4.0,6.0]

w = 1.0 #初始化权重
learning_rate = 0.01  #学习率
def forward(x):
    return w*x

#计算平均损失值
def cost(x_data,y_data):
    cost = 0
    for x,y in zip(x_data,y_data):
        y_pred = forword(x)
        cost += (y_pred - y)**2
    return cost/len(x_data)

def gradient(x_data,y_data):
    grad = 0
    for x,y in zip(x_data,y_data):
        grad += 2*x*(w*x-y)
    return grad/len(x_data)

print('Predict (before training)',4,forward(4))

epoch_list = []
cost_list = []

#训练100次
for epoch in range(100):
    cost_val = cost(x_data,y_data)
    grad_val = gradient(x_data,y_data)
    w -= learning_rate*grad_val
    print('Epoch:',epoch,'w=',w,'cost=',cost_val)
    epoch_list.append(epoch)
    cost_list.append(cost_val)
print('predict(after training)',4,forward(4))

#可视化
plt.plot(epoch_list,cost_list)
plt.xlabel('Epoch')
plt.xlabel('Cost')
plt.show()

运行结果:
左后基本趋向于2.00,cost几乎为0
Pytorch深度学习(二):梯度下降算法和随机梯度下降_第4张图片
Pytorch深度学习(二):梯度下降算法和随机梯度下降_第5张图片

二、随机梯度下降

1.演变过程

Pytorch深度学习(二):梯度下降算法和随机梯度下降_第6张图片
w更新时是对每一个样本进行更新。

2.代码如下

import numpy as np
import matplotlib.pyplot as plt

x_data = [1.0,2.0,3.0]
y_data = [2.0,4.0,6.0]

w = 1.0 #初始化权重
learning_rate = 0.01  #学习率
def forward(x):
    return w*x

#计算一个样本损失值
def loss(x,y):
    y_pred = forword(x)
    return (y_pred-y) ** 2

def gradient(x,y):
    grad = 2*x*(w*x-y)
    return grad

print('Predict (before training)',4,forward(4))

epoch_list = []
loss_list = []

#训练100次
for epoch in range(100):
    for x,y in zip(x_data,y_data):
        loss_val = loss(x,y)
        grad_val = gradient(x,y)
        w -= learning_rate*grad_val
        print('Epoch:',epoch,'w=',w,'loss=',cost_val)
    epoch_list.append(epoch)
    loss_list.append(loss_val)
    
print('predict(after training)',4,forward(4))

#可视化
plt.plot(epoch_list,loss_list)
plt.xlabel('Epoch')
plt.ylabel('Loss')
plt.show()

运行结果:
Pytorch深度学习(二):梯度下降算法和随机梯度下降_第7张图片
Pytorch深度学习(二):梯度下降算法和随机梯度下降_第8张图片

你可能感兴趣的:(Pytorch深度学习,人工智能与机器学习,python学习,神经网络,算法,深度学习,python)