L2正则化Regularization详解及反向传播的梯度求导
摘要
本文解释L2正则化Regularization, 求解其在反向传播中的梯度, 并使用TensorFlow和PyTorch验证.
相关
系列文章索引 :
https://blog.csdn.net/oBrightLamp/article/details/85067981
正文
1. L2 正则原理
若某一个神经网络存在一个参数矩阵 Wm×nW_{m\times n}Wm×n, 该网络在训练时输出一个损失值 error (标量 e0e_0e0), 对 W 加上L2正则化项后的损失值为 eee. 已知 e0e_0e0 对 W 的梯度为 ∇e0(W)\nabla {e_0}_{(W)}∇e0(W), 求 e 对 W 的梯度.
根据题意 :
e=e0+r  r=λ2∑i=1m∑j=1nwij2e = e_0+r\\ \;\\ r = \frac{\lambda}{2}\sum_{i=1}^{m}\sum_{j=1}^{n}w_{ij}^2 e=e0+rr=2λi=1∑mj=1∑nwij2
其中 λ\lambdaλ 为正则项衰减系数, wijw_{ij}wij 为矩阵 W 的元素.
梯度求导 :
dedW=de0dW+drdW=∇e0(W)+λW\frac{de}{dW}=\frac{de_0}{dW} + \frac{dr}{dW}=\nabla {e_0}_{(W)} +\lambda W dWde=dWde0+dWdr=∇e0(W)+λW
代入梯度下降公式, 加上正则化项前 :
W(i+1)=W(i)−η∇e0(W)W^{(i+1)} = W^{(i)}-\eta\nabla {e_0}_{(W)} W(i+1)=W(i)−η∇e0(W)
加上L2正则化项后 :
W(i+1)=W(i)−η(∇e0(W)+λW)=(1−ηλ)W(i)−η∇e0(W)W^{(i+1)} = W^{(i)}-\eta(\nabla {e_0}_{(W)}+\lambda W)= (1-\eta\lambda)W^{(i)}-\eta\nabla {e_0}_{(W)} W(i+1)=W(i)−η(∇e0(W)+λW)=(1−ηλ)W(i)−η∇e0(W)
我们可以看到, W 前面乘了一个小于 1 的系数.
故 L2 正则化又称为 L2 惩罚 (penalty) 或权值衰减 (Weight Decay).
2. 程序实现
2.1 TensorFlow
import numpy as np
import tensorflow as tftf.enable_eager_execution()
np.random.seed(123)
np.set_printoptions(8, suppress=True)x_numpy = np.random.random((3, 4)).astype(np.double)
x_tensor = tf.Variable(x_numpy)
w_numpy = np.random.random((4, 5)).astype(np.double)
w_tensor = tf.Variable(w_numpy)weight_decay = 0.9with tf.GradientTape(persistent=True) as tape:loss = tf.reduce_sum(tf.matmul(x_tensor, w_tensor))loss2 = loss + tf.reduce_sum(tf.square(w_tensor)) * weight_decaygrad = tape.gradient(loss, w_tensor).numpy()
grad2 = tape.gradient(loss2, w_tensor).numpy()print("check_grad")
print(grad + 2 * w_numpy * weight_decay)
print(grad2)"""
check_grad
[[ 2.6863001 2.00429027 2.61334972 3.22526179 2.22535517][ 1.41717647 2.05815579 2.05865297 2.24328504 2.63034054][ 2.85481325 2.65063599 2.85119176 2.13211971 2.20201325][ 2.37606803 2.4938795 3.10095124 2.13098311 2.74585633]]
[[ 2.6863001 2.00429027 2.61334972 3.22526179 2.22535517][ 1.41717647 2.05815579 2.05865297 2.24328504 2.63034054][ 2.85481325 2.65063599 2.85119176 2.13211971 2.20201325][ 2.37606803 2.4938795 3.10095124 2.13098311 2.74585633]]
"""
2.2 PyTorch
PyTorch 在 torch.optim.SGD 方法中使用下式实现L2正则化 :
W(i+1)=W(i)−ηG(i)  G(i)=dLdW(i)+λW(i)W^{(i+1)} = W^{(i)}-\eta G^{(i)}\\ \;\\ G^{(i)} =\frac{dL}{dW^{(i)}} + \lambda W^{(i)}\\ W(i+1)=W(i)−ηG(i)G(i)=dW(i)dL+λW(i)
dLdW(i)\frac{dL}{dW^{(i)}}dW(i)dL 是 L2 正则化前的梯度, λ\lambdaλ 是权重衰减系数, G(i)G^{(i)}G(i) 是更新梯度.
验证代码 :
import torch
import numpy as npnp.random.seed(123)
np.set_printoptions(8, suppress=True)x_numpy = np.random.random((3, 4)).astype(np.double)
x_torch = torch.tensor(x_numpy, requires_grad=True)
x_torch2 = torch.tensor(x_numpy, requires_grad=True)w_numpy = np.random.random((4, 5)).astype(np.double)
w_torch = torch.tensor(w_numpy, requires_grad=True)
w_torch2 = torch.tensor(w_numpy, requires_grad=True)lr = 0.1
weight_decay = 0.9
sgd = torch.optim.SGD([w_torch], lr=lr, weight_decay=0)
sgd2 = torch.optim.SGD([w_torch2], lr=lr, weight_decay=weight_decay)y_torch = torch.matmul(x_torch, w_torch)
y_torch2 = torch.matmul(x_torch2, w_torch2)loss = y_torch.sum()
loss2 = y_torch2.sum()sgd.zero_grad()
sgd2.zero_grad()loss.backward()
loss2.backward()sgd.step()
sgd2.step()w_grad = w_torch.grad.data.numpy()
w_grad2 = w_torch2.grad.data.numpy()print("check_grad")
print(w_grad + weight_decay * w_numpy)
print(w_grad2)"""
check_grad
[[ 2.29158508 1.95058016 2.25510989 2.56106592 2.06111261][ 1.25926989 1.57975955 1.58000814 1.67232418 1.86585193][ 2.20280346 2.10071483 2.20099271 1.84145669 1.87640346][ 2.17063112 2.22953686 2.53307273 2.04808866 2.35552527]]
[[ 2.29158508 1.95058016 2.25510989 2.56106592 2.06111261][ 1.25926989 1.57975955 1.58000814 1.67232418 1.86585193][ 2.20280346 2.10071483 2.20099271 1.84145669 1.87640346][ 2.17063112 2.22953686 2.53307273 2.04808866 2.35552527]]"""
L2正则化Regularization详解及反向传播的梯度求导相关推荐
- Batch Normalization函数详解及反向传播中的梯度求导
摘要 本文给出 Batch Normalization 函数的定义, 并求解其在反向传播中的梯度 相关 配套代码, 请参考文章 : Python和PyTorch对比实现批标准化Batch Normal ...
- 【机器学习】详解 BackPropagation 反向传播算法!
首先介绍一下链式法则 假如我们要求z对x1的偏导数,那么势必得先求z对t1的偏导数,这就是链式法则,一环扣一环 BackPropagation(BP)正是基于链式法则的,接下来用简单的前向传播网络为例 ...
- 机器学习--多标签softmax + cross-entropy交叉熵损失函数详解及反向传播中的梯度求导
https://blog.csdn.net/oBrightLamp/article/details/84069835 正文 在大多数教程中, softmax 和 cross-entropy 总是一起出 ...
- 实验详解——DNS反向解析、DNS主服务器和从服务器的配置
实验详解--DNS反向解析.DNS主服务器和从服务器的配置 实验一:DNS反向解析 1.安装bind 2.查找配置文件路径 3.配置/etc/named.conf主配置文件 4.修改/etc/name ...
- 学完Nginx/OpenResty详解,反向代理与负载均衡配置,能涨薪多少
反向代理与负载均衡配置 接下来介绍Nginx的重要功能:反向代理+负载均衡.单体Nginx的性能虽然不错,但也是有瓶颈的.打个比方:用户请求发起一个请求,网站显示的图片量比较大,如果这个时候有大量用户 ...
- 「机器学习速成」训练神经网络:反向传播、梯度爆炸消失Dropout
https://www.toutiao.com/a6706075530187244045/ 2019-06-24 20:38:02 大家好,今天我们学习[机器学习速成]之 训练神经网络. 我们 马上学 ...
- AI应用开发基础傻瓜书系列2-神经网络中反向传播与梯度下降的基本概念
AI应用开发基础傻瓜书系列2-神经网络中反向传播与梯度下降的基本概念 Copyright © Microsoft Corporation. All rights reserved. 适用于Licens ...
- 反向传播与梯度下降概念
反向传播和梯度下降这两个词,第一眼看上去似懂非懂,不明觉厉.这两个概念是整个神经网络中的重要组成部分,是和误差函数/损失函数的概念分不开的. 神经网络训练的最基本的思想就是:先"蒙" ...
- 系列之2-神经网络中反向传播与梯度下降的基本概念
Copyright © Microsoft Corporation. All rights reserved. 适用于License版权许可 更多微软人工智能学习资源,请见微软人工智能教育与学习共建社 ...
最新文章
- 1045 Favorite Color Stripe(LIS解法)
- java 单个用户的多重并发会话_单个用户的多重并发会话限制/限制单客户端同时登录多个用户...
- python图片读取优化_python读取raw binary图片并提取统计信息的实例
- UML 10 种常见的域建模错误
- Jmeter BeanShell使用json.jar包处理Json数据
- WHERE和HAVING子句有什么区别?
- Python importlib
- [原]linux 修改 hostname 立即生效
- php mac windows,苹果电脑是windows系统吗
- 如何使用Java代码将GBK编码格式的工程转换为UTF-8编码格式的工程
- python种颜色循环_如何用Python做一个RGB和16进制的互转工具
- android开发学习——day3
- VvvebJs可视化前端设计开发工具
- 计算机安全证书有问题怎么办,此网站的安全证书有问题如何取消 此网站的安全证书有问题解决方法...
- android apk 重新签名工具,安卓apk重新签名教程,快来定制自己的apk吧
- 数据中台和数仓的关系
- C/C++ fabs 函数 - C语言零基础入门教程
- 报错:IndexError: only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or
- Dataphin核心功能(四):安全——基于数据权限分类分级和敏感数据保护,保障企业数据安全
- 什么产品适合做海外众筹
热门文章
- Active Directory概述
- 网页无法复制的修复方法---Chrome上,最简单的解除“右键限制”的方法 - 书签法
- Python 版 Instance Activator
- 千亿词霸下载|千亿词霸翻译器
- 腾讯桌面整理格子显示位置和通电顺序关系
- 浪潮服务器2016销售额,Gartner:2016前三季度,浪潮服务器销售额中国第一
- 蓝海创意云丨【渲染制作教程】3层楼室外景观
- android mipmap 添加,我们应该如何使用android 4.4添加的mipmap文件夹?
- panda 满足条件的行 index_丽江自由行: 我如何安排我从广州到丽江的行程?
- 抓包工具 Charles使用教程