%matplotlib inlineimport numpy as np
import torch
import time
from torch import nn, optim
import math
import sys
sys.path.append('/home/kesci/input')import d2lzh1981 as d2l
1|1一维梯度下降
证明:沿梯度反方向移动自变量可以减小函数值
泰勒展开:
f(x+ϵ)=f(x)+ϵf′(x)+O(ϵ2)
代入沿梯度方向的移动量 ηf′(x):
f(x−ηf′(x))=f(x)−ηf′2(x)+O(η2f′2(x))
f(x−ηf′(x))≲f(x)
x←x−ηf′(x)
e.g.
f(x)=x2
def f(x):return x**2# Objective functiondef gradf(x):return2* x # Its derivativedef gd(eta):
x =10
results =[x]for i in range(10):
x -= eta * gradf(x)
results.append(x)print('epoch 10, x:', x)return results
res = gd(0.2)
epoch 10, x:0.06046617599999997
def show_trace(res):
n = max(abs(min(res)), abs(max(res)))
f_line = np.arange(-n, n,0.01)
d2l.set_figsize((3.5,2.5))
d2l.plt.plot(f_line,[f(x)for x in f_line],'-')
d2l.plt.plot(res,[f(x)for x in res],'-o')
d2l.plt.xlabel('x')
d2l.plt.ylabel('f(x)')
show_trace(res)
学习率
show_trace(gd(0.05))
epoch 10, x:3.4867844009999995
show_trace(gd(1.1))
epoch 10, x:61.917364224000096
局部极小值
e.g.
f(x)=xcoscx
c =0.15* np.pi
def f(x):return x * np.cos(c * x)def gradf(x):return np.cos(c * x)- c * x * np.sin(c * x)
show_trace(gd(2))
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人