【深度学习技术】python 反向传播求梯度

反向传播

【深度学习技术】python 反向传播求梯度_第1张图片

当有激活函数的时候传播的方式如下:

【深度学习技术】python 反向传播求梯度_第2张图片

复合表达式、链式法则、反向传播

链式法则:将偏导数相乘。

对于一个符合表达式:

这里写图片描述

# -*- coding: utf-8 -*-
"""
Created on Fri Dec 23 17:24:24 2016

@author: CrazyVertigo
"""

import math

x = 3 # 例子数值
y = -4 # 前向传播 
sigy = 1.0 / (1 + math.exp(-y)) # 分子中的sigmoi          #(1) 
num = x + sigy # 分子                                    #(2)
sigx = 1.0 / (1 + math.exp(-x)) # 分母中的sigmoid         #(3) 
xpy = x + y #(4) 
xpysqr = xpy**2 #(5) 
den = sigx + xpysqr # 分母                                #(6) 
invden = 1.0 / den #(7) f = num * invden # 搞定!  #(8)


# 回传 f = num * invden 
dnum = invden # 分子的梯度                                     #(8) 
dinvden = num #(8) # 回传 
invden = 1.0 / den 
dden = (-1.0 / (den**2)) * dinvden #(7) 
# 回传 den = sigx + xpysqr 
dsigx = (1) * dden #(6) 
dxpysqr = (1) * dden #(6) 
# 回传 xpysqr = xpy**2 
dxpy = (2 * xpy) * dxpysqr #(5) 
# 回传 xpy = x + y 
dx = (1) * dxpy #(4) 
dy = (1) * dxpy #(4) # 回传 sigx = 1.0 / (1 + math.exp(-x)) 
dx += ((1 - sigx) * sigx) * dsigx # Notice += !! See notes below  #(3) 
# 回传 num = x + sigy 
dx += (1) * dnum #(2) 
dsigy = (1) * dnum #(2) 
# 回传 sigy = 1.0 / (1 + math.exp(-y)) 
dy += ((1 - sigy) * sigy) * dsigy #(1)

回传流中的模式:

【深度学习技术】python 反向传播求梯度_第3张图片

门单元的含义

【深度学习技术】python 反向传播求梯度_第4张图片

学习率的选择

【深度学习技术】python 反向传播求梯度_第5张图片

梯度的更新 w -= a*^w

参考CS231n 笔记 https://zhuanlan.zhihu.com/p/21407711?refer=intelligentunit

你可能感兴趣的:(Deep,Learning)