经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 大数据/云/AI » 人工智能基础 » 查看文章
梯度下降简介
来源:cnblogs  作者:咸鱼Chen  时间:2019/5/22 8:35:11  对本文有异议

Outline

  • What's Gradient

  • What does it mean

  • How to Search

  • AutoGrad

What's Gradient

  • 导数,derivative,抽象表达

  • 偏微分,partial derivative,沿着某个具体的轴运动

  • 梯度,gradient,向量

\[ \nabla{f} = (\frac{\partial{f}}{\partial{x_1}};\frac{\partial{f}}{{\partial{x_2}}};\cdots;\frac{\partial{f}}{{\partial{x_n}}}) \]

19-梯度下降简介-梯度图.jpg

What does it mean?

  • 箭头的方向表示梯度的方向
  • 箭头模的大小表示梯度增大的速率

19-梯度下降简介-梯度是什么.jpg

How to search

  • 沿着梯度下降的反方向搜索

19-梯度下降简介-2梯度搜索.jpg

For instance

\[ \theta_{t+1}=\theta_t-\alpha_t\nabla{f(\theta_t)} \]

19-梯度下降简介-二维梯度下降1.gif

19-梯度下降简介-二维梯度下降2.gif

AutoGrad

  • With Tf.GradientTape() as tape:
    • Build computation graph
    • \(loss = f_\theta{(x)}\)
  • [w_grad] = tape.gradient(loss,[w])
  1. import tensorflow as tf
  1. w = tf.constant(1.)
  2. x = tf.constant(2.)
  3. y = x * w
  1. with tf.GradientTape() as tape:
  2. tape.watch([w])
  3. y2 = x * w
  1. grad1 = tape.gradient(y, [w])
  2. grad1
  1. [None]
  1. with tf.GradientTape() as tape:
  2. tape.watch([w])
  3. y2 = x * w
  1. grad2 = tape.gradient(y2, [w])
  2. grad2
  1. [<tf.Tensor: id=30, shape=(), dtype=float32, numpy=2.0>]
  1. try:
  2. grad2 = tape.gradient(y2, [w])
  3. except Exception as e:
  4. print(e)
  1. GradientTape.gradient can only be called once on non-persistent tapes.
  • 永久保存grad
  1. with tf.GradientTape(persistent=True) as tape:
  2. tape.watch([w])
  3. y2 = x * w
  1. grad2 = tape.gradient(y2, [w])
  2. grad2
  1. [<tf.Tensor: id=35, shape=(), dtype=float32, numpy=2.0>]
  1. grad2 = tape.gradient(y2, [w])
  2. grad2
  1. [<tf.Tensor: id=39, shape=(), dtype=float32, numpy=2.0>]

\(2^{nd}\)-order

  • y = xw + b

  • \(\frac{\partial{y}}{\partial{w}} = x\)
  • \(\frac{\partial^2{y}}{\partial{w^2}} = \frac{\partial{y'}}{\partial{w}} = \frac{\partial{X}}{\partial{w}} = None\)

  1. with tf.GradientTape() as t1:
  2. with tf.GradientTape() as t2:
  3. y = x * w + b
  4. dy_dw, dy_db = t2.gradient(y, [w, b])
  5. d2y_dw2 = t1.gradient(dy_dw, w)

原文链接:http://www.cnblogs.com/nickchen121/p/10901468.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号