梯度下降法与反向传播

一、梯度下降法

1.什么是梯度下降法

顺着梯度下滑,找到最陡的方向,迈一小步,然后再找当前位,置最陡的下山方向,再迈一小步…

  

通过比较以上两个图,可以会发现,由于初始值的不同,会得到两个不同的极小值,所以权重初始值的设定也是十分重要的,通常的把W全部设置为0很容易掉到局部最优解,一般可以按照高斯分布的方式分配初始值。

 2.有两种计算梯度的方法

(1)慢一些但是简单一些的数值梯度/numerical gradient

对每个维度,都在原始值上加上一个很小的h,然后计算这个维度/方向上的偏导,最后组在一起得到梯度grad。

#encoding:utf-8
import numpy as np
def eval_numeriical(f,x):
    """"计算x上f的梯度算法,x是一个vector,f为参数为x的函数"""
    fx=f(x)
    grad=np.zero(x.shape)
    h=0.00001
    #对x的每个维度都计算一遍
    it=np.nditer(x,flags=[‘multi_index‘],op_flags=[‘readwrite‘])
    while not it.finished:
        #计算x+h处的函数值
        ix=it.multi_index
        old_value=x[ix]
        x[ix]=old_value+h
        fxh=f(x)
        x[ix]=old_value
        #计算偏导数
        grad[ix]=(fxh-fx)/h
        it.iternext()return grad

关于迭代的步长:1)步子迈得太小,时间耗不起。  2)步子迈得太大,容易跳过最小值,可能找不到最优点

(2) 速度快但是更容易出错的解析梯度/analytic gradient

解析法计算梯度:速度非常快,但是容易出错(反倒之前的数值法就显出优势),我们可以先计算解析梯度和数值梯度,然后比对结果和校正,然后就可以大胆地进行解析法计算了(这个过程叫做梯度检查/检测)

举例:一个样本点的SVM损失函数:

求偏导:

这个求偏导的意思是:当括号里的l是个布尔函数,表示如果括号里的表达式成立的话就是1,不成立的话就是0.

 3.这个简单的循环就是很多神经网络库的核心

4.什么是Mini-batch,以及其作用

Mini-batch就是从所有的训练样本中抽出一部分来训练,被抽出的训练样本就是Mini-batch。

对整个训练数据集的样本都算一遍损失函数,以完成参数迭代是一件非常耗时的事情,一个我们通常会用到的替代方法是,采样出一个子集在其上计算梯度。

二、反向传播

简单来说就是高数中得链式法则。

比如函数f(x,y,z)=(x+y)*z

Sigmoid例子

函数:                

Sigmoid函数 的导数

具体算一下:

Sigmoid神经网络的例子

(1)

(2)

(3)

(4)

以上为正向传播的公式,(2)是对(1)的简单缩写,a=sigmod(z),c为cost损失函数,c对z的偏导为输出层的误差

损失函数要可导,第一个公式是求损失函数对于L层的神经元的偏导,为了更容易理解,不是对a求偏导,而是对z求偏导,其中a=sigmod(a)。也就是可以得出dc/dz,我们要求得dc/dw=dc/dz * dz/dw,而dz/dw就是a的值,最终推得第四个公式。

概括的一个描述

时间: 2024-11-02 14:50:38

梯度下降法与反向传播的相关文章

深入浅出--梯度下降法及其实现(经典)

深入浅出--梯度下降法及其实现 是介绍梯度下降算法和反向传播最经典额一片文章,没有之一. 原文地址:https://www.cnblogs.com/liuys635/p/11257150.html

循环神经网络(RNN)模型与前向反向传播算法

在前面我们讲到了DNN,以及DNN的特例CNN的模型和前向反向传播算法,这些算法都是前向反馈的,模型的输出和模型本身没有关联关系.今天我们就讨论另一类输出和模型间有反馈的神经网络:循环神经网络(Recurrent Neural Networks ,以下简称RNN),它广泛的用于自然语言处理中的语音识别,手写书别以及机器翻译等领域. 1. RNN概述 在前面讲到的DNN和CNN中,训练样本的输入和输出是比较的确定的.但是有一类问题DNN和CNN不好解决,就是训练样本输入是连续的序列,且序列的长短不

神经网络系列之二 -- 反向传播与梯度下降

系列博客,原文在笔者所维护的github上:https://aka.ms/beginnerAI, 点击star加星不要吝啬,星越多笔者越努力. 第2章 神经网络中的三个基本概念 2.0 通俗地理解三大概念 这三大概念是:反向传播,梯度下降,损失函数. 神经网络训练的最基本的思想就是:先"猜"一个结果,我们叫预测结果a,看看这个预测结果和事先标记好的训练集中的真实结果y之间的差距,然后调整策略,再试一次,这一次就不是"猜"了,而是有依据地向正确的方向靠近.如此反复多次

神经网络反向传播梯度计算数学原理

[神经网络]反向传播梯度计算数学原理 1 文章概述 本文通过一段来自于Pytorch官方的warm-up的例子:使用numpy来实现一个简单的神经网络.使用基本的数学原理,对其计算过程进行理论推导,以揭示这几句神奇的代码后面所包含的原理. 估计对大多数的同学来说,看完这个文章,肯定会是这样的感觉:字都认识,但是就是不知道讲的是啥~!不过对于有心人来说,本文确实能起到点睛之笔,就是你研究很久后,还差一点火候就顿悟了,希望本文能够帮你顿悟. 关键字:Numpy,神经网络,矩阵分析,反射传播,梯度下降

梯度下降法解神经网络

本文是Andrew Ng在Coursera的机器学习课程的笔记. 整体步骤 确定网络模型 初始化权重参数 对于每个样例,执行以下步骤直到收敛 计算模型输出:forward propagation 计算代价函数:比较模型输出与真实输出的差距 更新权重参数:back propagation 确定网络模型 神经网络模型由输入层(layer 1).中间层(layer 2,..,L-1).输出层(layer L)三部分组成.输入层每个单元代表一个特征,输出层的每个单元代表一个类别. 如果我们的目标如果是识

DL4NLP——神经网络(一)前馈神经网络的BP反向传播算法步骤整理

这里把按[1]推导的BP算法(Backpropagation)步骤整理一下,备忘使用.[1] 中直接使用矩阵微分的记号进行推导,整个过程十分简洁.而且这种矩阵形式有一个非常大的优势就是对照其进行编程实现时非常方便. 但其实用标量计算推导也有一定的好处,比如可以清楚地知道某个权重是被谁所影响的. 记号约定: $L$:神经网络的层数.输入层不算. $n^l$:第 $l$ 层神经元的个数.偏置神经元不算在内. $W^{l}\in\mathbb R^{n^l\times n^{l-1}}$:第 $l-1

稀疏自动编码之反向传播算法(BP)

假设给定m个训练样本的训练集,用梯度下降法训练一个神经网络,对于单个训练样本(x,y),定义该样本的损失函数: 那么整个训练集的损失函数定义如下: 第一项是所有样本的方差的均值.第二项是一个归一化项(也叫权重衰减项),该项是为了减少权连接权重的更新速度,防止过拟合. 我们的目标是最小化关于 W 和 b 的函数J(W,b). 为了训练神经网络,把每个参数 和初始化为很小的接近于0的随机值(例如随机值由正态分布Normal(0,ε2)采样得到,把 ε 设为0.01), 然后运用批量梯度下降算法进行优

什么是反向传播

作者:韩小雨 类别:①反向传播算法  ②反向传播模型 反向传播算法(英:Backpropagation algorithm,简称:BP算法) 算法简介:是一种监督学习算法,常被用来训练多层感知机. 于1974年,Paul Werbos[1]首次给出了如何训练一般网络的学习算法,而人工神经网络只是其中的特例.不巧的,在当时整个人工神经网络社群中却无人知晓Paul所提出的学习算法.直到80年代中期,BP算法才重新被David Rumelhart.Geoffrey Hinton及Ronald Will

反向传播(Backpropagation)算法的数学原理

准备 本文不是一篇引导读者入门的科普文.读者至少需要对人工神经网络有概念性的理解,并且熟悉偏导数. 这是一个简单的人工神经网络,分为输入层,隐藏层和输出层.输入层以原始数据 x 作为本层向下一层的输出,即 a(1):隐藏层将 a(1) 中的元素进行线性组合作为自己的输入,即 z(2),然后将 z(2) 进行一个数学变换(函数 g(z))作为对下一层的输出,即 a(2).以此类推,得到最后一层的输出,即 a(3) 或 hΘ(x),就是人工神经网络的运算结果. 其中 Θ(1), Θ(2) 分别是第1