梯度下降算法 | 学习笔记

简介: 快速学习梯度下降算法

开发者学堂课程【Tensorflow2.0入门与实战梯度下降算法】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/664/detail/11100


梯度下降算法


基本介绍:

一.梯度下降算法含义

二.梯度的输出

三.如何用梯度下降算法求解出a和b的参数

一.梯度下降算法含义

梯度下降算法是一种致力于找到函数极值点的算法,是深度学习的核心算法。

前面介绍过,所谓“学习”便是改进模型参数,以便通过大量训练步骤将损失最小化,损失为均方差的损失。有了这个概念,将梯度下降法应用于寻找损失函数的极值点便构成了依据输入数据的模型学习。

通过改变权重的参数从而找到损失函数的极值。

 

二.梯度的输出

梯度的输出是一个由若干偏导数构成的向量,它的每个分量对应于函数对输入向量的相应分量的偏导:

image.png

梯度的输出向量表明了在每个位置损失函数增长最快的方向,可将它视为表示了在函数的每个位置向哪个方向移动函数值可以增长。


三.如何用梯度下降算法求解出a和b的参数

案例:

image.png

上节课的例子是求解出a和b使得损失函数最小。假定损失函数为z,z=(f(x)-y)²/n。z受两个变量的影响,第一个权重a,第二个为第二个权重b,要找到合适的a,b的值使得z最小。

它们之间有一个曲线,应该如何找到极值点,图片最低点对应的位置,对应a的值假设为2,对应b的值假设为1,当a=2,b=1时z取得最小值。如何取得最小值找到a和b。

在深度学习中使用随机初始化,随机初始化是重要的概念,在 Tensorflow 2.0中 Tf.keras 是高阶的API,已经分装好了变量初始化操作,虽然不需要自己初始化变量但要知道怎么做,其实是随机的初始化a和b的值,比如a=3,b=5随机初始化,在深度网络中随机初始化很多值,如何求得最小值需要计算梯度。

使用梯度下降算法来求解深度学习极值的方法:

求出最小值,用随机初始化。计算梯度值,寻找梯度值使得z变化最快的方向就叫做梯度。

随着梯度方向走b增大a减小继续走仍然有梯度,继续改变a和b的值使得z越来越小,只要z在变小就继续改变a和b的值。

每次改变代表学习速率。梯度就是它的导数,导数是变化最快的方向,沿着导数的方向去改变a和b的值,经过每一次循环求解导数改变a和b的值来找到最小值。

每次移动的距离就是学习的速率,既不能太大也不能太小。速率太小,要迭代n多次,速度非常慢。

速率太大会在极值点附近反复移动。下降过程如何避免局部极值点,沿着梯度方向走遇到,梯度为0为局部的极值点,在深度学习里局部极值点从来不是问题,因为使用随机初始化总有一个点找到z从而将局部极值点排除掉。

image.png

梯度下降算法在 Tensorflow 里集成了优化算法,优化算法其实是 compile 里的 optimizer,使用 optimizer 应用梯度寻找梯度的最小值,优化函数没有规定学习速率。

上节使用 adam 默认学习速率,可以用优化算法的实例规定学习速率。对于有哪些优化算法如何选择学习速率在后面自定义循环讲解这个问题。

相关文章
|
14天前
|
算法 C++
c++算法学习笔记 (21) STL
c++算法学习笔记 (21) STL
|
14天前
|
算法 C++
c++算法学习笔记 (20) 哈希表
c++算法学习笔记 (20) 哈希表
|
14天前
|
算法 C++
c++算法学习笔记 (19) 堆
c++算法学习笔记 (19) 堆
|
14天前
|
人工智能 算法 C++
c++算法学习笔记 (18) 约数
c++算法学习笔记 (18) 约数
|
14天前
|
人工智能 算法 C++
c++算法学习笔记 (17) 质数
c++算法学习笔记 (17) 质数
|
14天前
|
算法 C++
c++算法学习笔记 (16) 并查集
c++算法学习笔记 (16) 并查集
|
14天前
|
算法 C++
c++算法学习笔记 (15) 单调栈与单调队列
c++算法学习笔记 (15) 单调栈与单调队列
|
14天前
|
算法 C++
c++算法学习笔记 (14) 栈与队列
c++算法学习笔记 (14) 栈与队列
|
14天前
|
算法 C++
c++算法学习笔记 (13) 链表
c++算法学习笔记 (13) 链表
|
14天前
|
算法 C++
c++算法学习笔记 (12) 区间合并
c++算法学习笔记 (12) 区间合并