深度学习 loss下降后上升在下降_豆瓣9.4!深度学习入门:基于Python的理论与实现学习笔记(2)...

本文介绍了深度学习中的梯度下降法和误差反向传播算法,讲解了学习过程中权重和偏置的调整,以及如何通过数值微分和反向传播计算梯度,以最小化损失函数。此外,还提到了激活函数层的反向传播实现和参数更新的步骤。
摘要由CSDN通过智能技术生成

点击上方,选择星标置顶,每天给你送干货8639079e0e73d658608ff65b5fbc0c90.png

阅读大概需要20分钟3631d24f6e19d4e27aee2667d7f5d006.png

跟随小博主,每天进步一丢丢0e12a787ae54426b14783391a5842906.png

作者:云不见 链接:https://blog.csdn.net/Walk_OnTheRoad/article/details/107837003 编辑:王萌 澳门城市大学(深度学习冲鸭公众号) 此笔记是基于《深度学习入门》这本书的重点知识汇总。 接着 《深度学习入门:基于Python的理论与实现》学习笔记(1)继续学习笔记的记载。 目录: 梯度 神经网络的梯度 学习算法的实现步骤:     mini-batch的实现(为了提高学习的效率!) 利用误差反向传播法求梯度(高速)     加法节点的反向传播     乘法节点的反向传播     log对数的反向传播     指数e的反向传播 激活函数层反向传播的实现     1、Relu层的反向传播     2、sigmoid函数的反向传播     Affine层的反向传播     3、Softmax-with-Loss层的反向传播 误差反向传播法的实现 使用误差反向传播法的神经网络的学习 本文重点知识点:
  • 梯度
  • 神经网络计算梯度的实现(利用数值微分)
  • 学习算法的实现步骤
  • 利用误差反向传播法求梯度(更高速)
  • 激活函数层反向传播的实现
  • 利用误差反向传播法实现两层神经网络的学习
如有细节处没有写到的,请继续精读《深度学习入门:基于Python的理论与实现》,对小白来说真的是非常好的深度学习的入门书籍,通俗易懂。(书中的例子主要是基于CV的) 718f5226bc96dae561e2a863c9030a9f.png 梯度 为什么要计算梯度?
  • 寻找函数的最小值
前文我们已经说过,用损失函数来描述神经网络的好坏。损失函数越小,神经网络越好。 那么如何去寻找这个损失函数的最小值讷?也就是说如何找一个函数的最小值。
  • 通过数值微分计算梯度。梯度下降的地方,就是函数在变小的地方。直到梯度下降为0,这个函数的局部最小值也就找到啦。
这种方法就叫梯度下降法(SGD):寻找最小值的梯度法。 14c95f810da6fc5c9700fad06e244a13.png 图 数学式表示梯度法 学习率lr (η):梯度下降的速度。需要自己设定,不能太大,不能太小。 Python来实现数值微分计算梯度的梯度下降法:
def gradient_descent(f, init_x, lr=0.01, step_num=100): # step_num为更新次数    x = init_x    for i in range(step_num):        grad = numerical_gradient(f, x)        x -= lr * grad    return x
缺点: 但是通过数值微分计算梯度比较费时间,之后介绍的误差反向传播法会更高效。 神经网络的梯度 即求损失函数L关于权重参数的梯度 5ecbd53bf0abe72f260ef1c4c30ab506.png 图 损失函数L关于权重参数w的数值微分法计算梯度 以下是利用数值微分求梯度,实现简单神经网络的代码:
import sys, ossys.path.append(os.pardir)import numpy as npfrom common.functions import softmax, cross_entropy_errorfrom common.gradient import numerical_gradientclass simpleNet:    def __init__(self):        self.W = np.random.randn(2,3) # 用高斯分布进行初始化(正态分布)    def predict(self, x):        return np.dot(x, self.W)    def loss(self, x, t):        z = self.predict(x)        y = softmax(z)        loss = cross_entropy_error(y, t)        return loss
学习算法的实现步骤 也就是梯度下降法逐渐更新函数的过程
  • 前提神经网络存在合适的权重和偏置,调整权重和偏置以便拟合训练数据的过程称为“学习”。
神经网络的学习分成下面4个步骤。
  • 步骤1(mini-batch)从训练数据中随机选出一部分数据,这部分数据称为mini-batch。我们的目标是减小mini-batch的损失函数的值。
  • 步骤2(计算梯度)为了减小mini-batch的损失函数的值,需要求出各个权重参数的梯度。梯度表示损失函数的值减小最多的方向。
  • 步骤3(更新参数)将权重参数沿梯度方向进行微小更新。
  • 步骤4(重复)重复步骤1、步骤2、步骤3。
2层神经网络的实现代码:
import sys, ossys.path.append(os.pardir)from common.functions import *from common.gradient import numerical_gradientclass TwoLayerNet:    def __init__(self, input_size, hidden_size, output_size,                 weight_init_std=0.01):        # 1、初始化权重        self.params = {}        self.params['W1'] = weight_init_std * \                            np.random.randn(input_size, hidden_size)        self.params['b1'] = np.zeros(hidden_size)        self.params['W2'] = weight_init_std * \                            np.random.randn(hidden_size, output_size)        self.params['b2'] &#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值