深度学习优化算法总结

大致总结一下学到的各个优化算法。

一、梯度下降法

函数的梯度表示了函数值增长速度最快的方向,那么与其相反的方向,就可看作函数减少速度最快的方向。

在深度学习中,当目标设定为求解目标函数的最小值时,只要朝梯度下降的方向前进,就可以不断逼近最优值。

梯度下降主要组成部分:

1、待优化函数f(x)

2、待优化函数的导数g(x)

3、变量x,用于保存优化过程中的参数值

4、变量x点处的梯度值:grad

5、变量step,沿梯度下降方向前进的步长,即学习率

假设优化目标函数为:f(x) = (x-1)^2,那么导数为f‘(x) = g(x) = 2x - 2。我们可以直接看出最优值在x = 1处取得。

import numpy as np
import matplotlib.pyplot as plt

def f(x):
    return (x-1)**2

def g(x):
    return 2 * x -2

def gd(x_start, step, g):
    x_list = []
    y_list = []
    x = x_start
    for i in range(20):
        grad = g(x)
        x = x - step*grad
        x_list.append(x)
        y_list.append(f(x))
        print(‘x = {:}. grad = {:}, y = {:}‘.format(x, grad, f(x)))

        if grad < 1e-6:
            break;
    return x_list,y_list

x = np.linspace(-8,10,200)
y = f(x)
//初始点为 x = 10, step = 0.1
x_gd, y_gd = gd(10, 0.1, g)

plt.plot(x, y)
plt.plot(x_gd, y_gd, ‘r.‘)
plt.savefig(‘gradient_descent.png‘)
plt.show()

输出结果:

x = 8.2. grad = 18, y = 51.83999999999999
x = 6.76. grad = 14.399999999999999, y = 33.1776
x = 5.608. grad = 11.52, y = 21.233663999999997
x = 4.6864. grad = 9.216, y = 13.58954496
x = 3.9491199999999997. grad = 7.3728, y = 8.697308774399998
x = 3.3592959999999996. grad = 5.8982399999999995, y = 5.5662776156159985
x = 2.8874367999999997. grad = 4.718591999999999, y = 3.562417673994239
x = 2.5099494399999998. grad = 3.7748735999999994, y = 2.2799473113563127
x = 2.2079595519999997. grad = 3.0198988799999995, y = 1.45916627926804
x = 1.9663676415999998. grad = 2.4159191039999994, y = 0.9338664187315456
x = 1.7730941132799998. grad = 1.9327352831999995, y = 0.5976745079881891
x = 1.6184752906239999. grad = 1.5461882265599995, y = 0.3825116851124411
x = 1.4947802324992. grad = 1.2369505812479997, y = 0.2448074784719623
x = 1.3958241859993599. grad = 0.9895604649983998, y = 0.15667678622205583
x = 1.316659348799488. grad = 0.7916483719987197, y = 0.10027314318211579
x = 1.2533274790395903. grad = 0.633318697598976, y = 0.06417481163655406
x = 1.2026619832316723. grad = 0.5066549580791806, y = 0.04107187944739462
x = 1.1621295865853378. grad = 0.40532396646334456, y = 0.026286002846332555
x = 1.1297036692682703. grad = 0.32425917317067565, y = 0.016823041821652836
x = 1.1037629354146161. grad = 0.2594073385365405, y = 0.010766746765857796

二、Momentum动量算法

原文地址:https://www.cnblogs.com/lingjiajun/p/10118246.html

时间: 2024-11-06 16:52:28

深度学习优化算法总结的相关文章

深度学习——优化算法

优化算法以加快训练的速度 1. mini-batch 把训练集划分成小点的子集(mini-batch) X{1}表示第一个mini-batch X(1)第1个样本 X[1]第一层的输入 1.1 mini-batch梯度下降方法过程:每次对一个mini-batch进行计算,包括J, w都是针对一个子集的 epoch:一代,表示遍历了整个数据集(而不是一个子集) 1.2 使用mini-batch的代价函数变化:每次迭代处理的是一个mini-batch,而代价函数也是指J{t} 1.3如何选择min-

(转)深度学习前沿算法思想

深度学习前沿算法思想 本文转自: https://mp.weixin.qq.com/s?__biz=MzA5NDExMTAzNA==&mid=2649981646&idx=2&sn=8fe05eac5a5068efb65ca1602e5fd3a0&chksm=8854b69bbf233f8db5dbaa1ea8396d181c9a35e760ab3c1c4934b504f69fe92683972d78d327&mpshare=1&scene=2&sr

[深度学习]Wake-Sleep算法

本文翻译自2007-To recognize shapes, first learn to generate images, Geoffrey Hinton. 第五种策略的设计思想是使得高层的特征提取器能够和底层的进行通信, 同时可以很容易地使用随机二态神经元的分层网络来实现. 这些神经元的激活概率是关于总输入的一个平滑非线性方程: 其中si和sj是神经元i和j的活跃度(activity), wij是i和j的权值, bj是j的偏置. 图1 如果训练数据是使用图1中类型的多层图像模型从上到下生成的

深度学习(二)-----算法岗面试题

● 深度学习了解多少,有看过底层代码吗?caffe,tf? ● 除了GMM-HMM,你了解深度学习在语音识别中的应用吗? 参考回答: 讲了我用的过DNN-HMM,以及与GMM-HMM的联系与区别:然后RNN+CTC,这里我只是了解,大概讲了一下CTC损失的原理:然后提了一下CNN+LSTM. ● 用过哪些移动端深度学习框架? 参考回答: 开源的有:小米的MACE,骁龙的SNPE,腾讯的FeatherCNN和ncnn,百度的mobile-deep-learning(MDL):caffe.tenso

深度学习(三)----算法岗面试题

● 神经网络为啥用交叉熵. 参考回答: 通过神经网络解决多分类问题时,最常用的一种方式就是在最后一层设置n个输出节点,无论在浅层神经网络还是在CNN中都是如此,比如,在AlexNet中最后的输出层有1000个节点,而即便是ResNet取消了全连接层,也会在最后有一个1000个节点的输出层. 一般情况下,最后一个输出层的节点个数与分类任务的目标数相等.假设最后的节点数为N,那么对于每一个样例,神经网络可以得到一个N维的数组作为输出结果,数组中每一个维度会对应一个类别.在最理想的情况下,如果一个样本

ui2code中的深度学习+传统算法应用

背景 在之前的文章中,我们已经提到过团队在UI自动化这方面的尝试,我们的目标是实现基于 单一图片到代码 的转换,在这个过程不可避免会遇到一个问题,就是为了从单一图片中提取出足够的有意义的结构信息,我们必须要拥有从图片中切割出想要区块(文字.按钮.商品图片等)的能力,而传统切割算法遇到复杂背景图片往往就捉襟见肘了(见下图),这个时候,我们就需要有能力把复杂前后景的图片划分为各个层级图层,再交给切割算法去处理,拿到我们期望的结构信息. 经过传统切割算法处理,会无法获取图片结构信息,最终只会当成一张图

&lt;深度学习优化策略-3&gt; 深度学习网络加速器Weight Normalization_WN

前面我们学习过深度学习中用于加速网络训练.提升网络泛化能力的两种策略:Batch Normalization(Batch Normalization)和Layer Normalization(LN).今天讨论另一种与它们类似的策略:Weight Normalization(Weight Normalization).Weight Normalization是Batch Normalization的一种变体,与Batch Normalization最大不同点:对神经网络的权值向量W进行参数重写Re

深度学习(一)-------算法岗面试题

● BatchNormalization的作用 参考回答: 神经网络在训练的时候随着网络层数的加深,激活函数的输入值的整体分布逐渐往激活函数的取值区间上下限靠近,从而导致在反向传播时低层的神经网络的梯度消失.而BatchNormalization的作用是通过规范化的手段,将越来越偏的分布拉回到标准化的分布,使得激活函数的输入值落在激活函数对输入比较敏感的区域,从而使梯度变大,加快学习收敛速度,避免梯度消失的问题. ● 梯度消失 参考回答: 在神经网络中,当前面隐藏层的学习速率低于后面隐藏层的学习

深度学习BP算法的推导(附加RNN,LSTM的推导说明)

注:1)这篇文章主要参考Alex Graves的博士论文<Supervised Sequence Labelling with Recurrent Neural Networks> 详细介绍其关于BP算法的推导过程. 2)论文没有提到过偏差的处理,不过如果能耐心推导出论文给出的公式,那么这将十分简单. 3)由于是结合语音训练的,最后是softmax出来是获得有限结果的概率值,然后做交叉熵作为目标函数,所以可能与其他的网络不一致,但是反馈的推导应该是一样的,除了输出层和最后一个隐层之间的个推导.