梯度下降算法:

     待优化的损失值为 loss,那么我们希望预测的值能够很接近真实的值 y_pred ≈ y_label

     我们的样本有n个,那么损失值可以由一下公式计算得出:

要使得loss的值尽可能的小,才会让预测的值接近于标签值:

这里 arg 是(argument的缩写),数学中我们常常会遇到求最大最小值问题,通常会用argmax(F)、argmin(F)来求F函数的极值。

上述公式中的argmin就是去求我们的loss的最小值的w的参数的。

那么问题来了,argmin使用什么方式来去优化我们的F函数呢?

             梯度下降优化算法:(梯度下降顾名思义就是根据梯度来优化我们的loss使其减小的)

这里涉及到基本的微分思想(求偏导数)

Y =  W × X

dY/dX的值等于W, dY/dW的值为X

step1 : 求出loss的梯度值

step2:  更新W的值(迭代使得loss最小)

我们来看一下python的代码(手动求导):

x_data = [1.0, 2.0, 3.0]
y_data = [2.0, 4.0, 6.0] w = 1.0 # a random guess: random value # our model forward pass def forward(x):
return x * w # Loss function
def loss(x, y):
y_pred = forward(x)
return (y_pred - y) * (y_pred - y) # compute gradient (计算梯度的值)
def gradient(x, y): # d_loss/d_w
return 2 * x * (x * w - y) # Before training
print("predict (before training)", 4, forward(4)) # Training loop
for epoch in range(10):
for x_val, y_val in zip(x_data, y_data):
#计算梯度
grad = gradient(x_val, y_val)
# 更新W的值,0.01是学习率,换个意思就是w每次更新的步长是多少
w = w - 0.01 * grad
print("\tgrad: ", x_val, y_val, round(grad, 2))
l = loss(x_val, y_val) print("progress:", epoch, "w=", round(w, 2), "loss=", round(l, 2)) # After training
print("predict (after training)", "4 hours", forward(4))

#控制台输出的结果

predict (before training) 4 4.0
grad: 1.0 2.0 -2.0
grad: 2.0 4.0 -7.84
grad: 3.0 6.0 -16.23
progress: 0 w= 1.26 loss= 4.92
grad: 1.0 2.0 -1.48
grad: 2.0 4.0 -5.8
grad: 3.0 6.0 -12.0
progress: 1 w= 1.45 loss= 2.69
grad: 1.0 2.0 -1.09
grad: 2.0 4.0 -4.29
grad: 3.0 6.0 -8.87
progress: 2 w= 1.6 loss= 1.47
grad: 1.0 2.0 -0.81
grad: 2.0 4.0 -3.17
grad: 3.0 6.0 -6.56
progress: 3 w= 1.7 loss= 0.8
grad: 1.0 2.0 -0.6
grad: 2.0 4.0 -2.34
grad: 3.0 6.0 -4.85
progress: 4 w= 1.78 loss= 0.44
grad: 1.0 2.0 -0.44
grad: 2.0 4.0 -1.73
grad: 3.0 6.0 -3.58
progress: 5 w= 1.84 loss= 0.24
grad: 1.0 2.0 -0.33
grad: 2.0 4.0 -1.28
grad: 3.0 6.0 -2.65
progress: 6 w= 1.88 loss= 0.13
grad: 1.0 2.0 -0.24
grad: 2.0 4.0 -0.95
grad: 3.0 6.0 -1.96
progress: 7 w= 1.91 loss= 0.07
grad: 1.0 2.0 -0.18
grad: 2.0 4.0 -0.7
grad: 3.0 6.0 -1.45
progress: 8 w= 1.93 loss= 0.04
grad: 1.0 2.0 -0.13
grad: 2.0 4.0 -0.52
grad: 3.0 6.0 -1.07
progress: 9 w= 1.95 loss= 0.02
predict (after training) 4 hours 7.804863933862125


最新文章

  1. 查找素数Eratosthenes筛法的mpi程序
  2. [转自itilxf论坛]iTop百问百答
  3. ie6-ie8中不支持opacity透明度的解决方法
  4. Eclipse+Maven创建webapp项目<一>
  5. 数据结构2 静态区间第K大/第K小
  6. CentOS6.x安装配置nginx
  7. C++ Const(常类型)的作用总结
  8. Hadoop基础教程之分布式环境搭建
  9. poj3162 Walking Race
  10. HTML+CSS笔记 CSS笔记集合
  11. [Usaco2007 Jan]Running贝茜的晨练计划[一般DP]
  12. MySQl开发和生产环境索引对比
  13. jquery 动态创建的元素,绑定事件无效之解决方法
  14. 推荐一款jQueryajax插件(Ajaxify jQuery )
  15. python中类的创建和实例化
  16. webpack处理媒体文件(图片/视频和音频)
  17. git 修改默认编辑器
  18. Linux7 下重新安装YUM
  19. CListCtrl的Report风格自绘
  20. day74天中间件介绍

热门文章

  1. gdb调试时的问题Missing separate debuginfos, use: debuginfo-install glibc-XXX
  2. Linux Shell常用技巧(十一)
  3. mybatis逆向工程处理text类型字段
  4. Oracle startup的四个阶段
  5. javacript window对象
  6. css一边固定,另一边自适应的方法
  7. MySQL+Service+Servlet+Jsp实现Table表格分页展示数据
  8. work notes
  9. C# 操作word 模板 值 替换
  10. Spring Web Async异步处理#Callable #DeferredResult