深度学习入门-第6章参数的更新

SGD的缺点

如果函数的形状非均向,搜索的路径就会非常低效,根本原因是梯度的方向没有指向最小值的方向

Momenrum

新增变量v,对应物理上的速度。

AdaGrad

新增变量h,保存了以前的所有梯度值的平方和
在更新参数时,通过乘以1/根号h,就可以调整学习的尺度
参数的元素中变动较大(被大幅更新)的元素学习率将变小

Adam

融合了Momentum和AdaGrad的方法,也进行超参数的“偏置校正”也是其特点。

设置三个超参数,一个是学习率,另外两个是momentum系数和二次momentum系数

结论:

根据不同的问题选择不同的方法,SGD在mnist数据集中学习的表现比其他三种方法慢

一般而言,与SGD相比,其他三种方法可以学习得更快,有时最终的识别精度也更高

权重的初始值设为0,在误差反向传播法中,所有的权重值都会进行相同的更新,并拥有对称的值(重复的值),为了防止“权重均一化”(为了瓦解权重的对称结构),必须随机生成初始值。

隐藏层的激活值的分布:

向一个五层神经网络(激活函数使用sigmoid函数)传入随机生成的输入数据,用直方图绘制各层激活值的数据分布。

# coding: utf-8
import numpy as np
import matplotlib.pyplot as plt


def sigmoid(x):
    return 1 / (1 + np.exp(-x))


def ReLU(x):
    return np.maximum(0, x)


def tanh(x):
    return np.tanh(x)
    
input_data = np.random.randn(1000, 100)  # 1000个数据
node_num = 100  # 各隐藏层的节点(神经元)数
hidden_layer_size = 5  # 隐藏层有5层
activations = {}  # 激活值的结果保存在这里

x = input_data

for i in range(hidden_layer_size):
    if i != 0:
        x = activations[i-1]

    # 改变初始值进行实验!
    w = np.random.randn(node_num, node_num) * 1 #权重初始值设为1
    # w = np.random.randn(node_num, node_num) * 0.01
    # w = np.random.randn(node_num, node_num) * np.sqrt(2.0 / node_num)


    a = np.dot(x, w)


    # 将激活函数的种类也改变,来进行实验!
    z = sigmoid(a)
    # z = ReLU(a)
    # z = tanh(a)

    activations[i] = z

# 绘制直方图
for i, a in activations.items(): #item()方法把字典中每对key和value组成一个元组,并把这些元组放在列表中返回。
    plt.subplot(1, len(activations), i+1)
     '''fig.add_subplot(numrows, numcols, fignum) 三个参数,分别代表子图的行数,列数,图索引号。'''
    plt.title(str(i+1) + "-layer")
    if i != 0: plt.yticks([], []) #设置y轴的刻度
    plt.hist(a.flatten(), 30, range=(0,1)) #hist柱状图,a.flatten():a是个数组,a.flatten()就是把a降到一维,默认是按行的方向降,bin=30:有30个柱
plt.show()

结果:

在这里插入图片描述

Xavier初始值

如果前一层的节点数为n,则初始值使用标准差为1/√ ̄n的分布

w = np.random.randn(node_num, node_num) * np.sqrt(1.0 / node_num)

如果用tanh函数代替sigmoid函数,会呈吊钟型分布。

用作激活函数的函数最好具有关于原点对称的性质。

ReLu的权重初始值:

当激活函数使用ReLu函数时,一般推荐使用ReLu专用的初始值,也称He初始值

当前一层的节点数为n时,He初始值使用标准差为√ ̄(2/n)的高斯分布

Batch Normalization的算法:

优点:

  • 可以使学习快速进行(可以增大学习率)
  • 不那么依赖初始值(对于初始值不用那么神经质)
  • 抑制过拟合(降低Dropout等的必要性)

思路:
调整各层的激活值分布使其适当的广度,为此,要向神经网络中插入对数据分布进行正规化的层。
以进行学习时的Mini-batch为单位,按Mini-batch进行正规化(使数据分布的均值为0,方差为1)

正则化:

过拟合发生的原因:

  • 模型拥有大量参数、表现力强
  • 训练数据少

权值衰减:

该方法通过在学习的过程中对大的权值进行惩罚,来抑制过拟合。
对于所有权重,权值衰减方法都会为损失函数加上1/2λW²,因此在求权重梯度的计算中,要为之前的误差反向传播法的结果加上正则化项的导数λW

Dropout:

网络模型复杂时只用权值衰减就很难应对。
在学习过程中随机删除神经元的方法,训练时,随机选出隐藏层的神经元,然后将其删除。被删除的神经元不再进行信号的传递。然后,测试时,虽然会传递所有的神经元信号,但是对于各个神经元的输出,要乘上训练时的删除比例再输出。

import numpy as np
class Dropout:
    def __init__(self, dropout_ratio=0.5):
        self.dropout_ratio = dropout_ratio
        self.mask = None 
    def forward(self, x, train_flg=True):
        if train_flg:
            self.mask = np.random.rand(*x.shape) > self.dropout_ratio #self.mask会随机生成和x形状相同的数组
            return x * self.mask
        else:
            return x * (1.0 - self.dropout_ratio)
    def backward(self, dout):
        return dout * self.mask #每次正向传播时,self.mask都会以False的形式保存要删除的神经元

正向传播时传递了信号的神经元,反向传播时按原样传递信号,正向传播时没有传递信号的神经元,反向传播时信号将停在那里。

集成学习:

让多个模型单独进行学习,推理时再取多个模型的输出的平均值。这个集成学习与Dropout有密切的关系。这是因为可以将Dropout理解为,通过在学习过程中随机删除神经元,从而每一次都让不同的模型进行学习。并且,推理时,通过对神经元的输出乘以删除比例,可以取得模型的平均值。

超参数:

比如各层的神经元数量、batch大小、参数更新时的学习率或权值衰减等。
调整超参数时,必须使用超参数专用的确认数据。
用于调整超参数的数据一般称为验证数据。

(x_train, t_train),(x_test, t_test) = load_mnist()

#打乱训练数据

x_train, t_train = shuffle_dataset(x_train, t_train)

#分割验证数据

validation_rate = 0.20
validation_num = int(x_train.shape[0] * validation_rate)

x_val = x_train[:validation_num]
t_val = t_train[:validation_num]
x_train = x_train[:validation_num]
t_train = t_train[:validation_num]

分割训练数据前,先打乱了输入数据和教师标签,这是因为数据集的数据可能存在偏向。

超参数的最优化:

  1. 设定超参数的范围
  2. 从设定的超参数范围中随机采样
  3. 使用步骤2中采样的超参数的值进行学习,通过验证数据评估识别精度(但是要将epoch设置的很小)
  4. 重复步骤2和步骤3(100次等),根据它们的识别精度的结果,缩小超参数的范围。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
深入解析OracleDBA入门进阶与诊断案例 扫描版 作  者:盖国强 著 出 版 社:人民邮电出版社 出版时间:2009-1-1 页  数:527 内容简介   针对数据库的启动和关闭、控制文件与数据库初始化、参数参数文件、数据字典、内存管理、Buffer Cache与Shared Pool原理、重做、回滚与撤销、等待事件、性能诊断与SQL优化等几大Oracle热点主题,本书从基础知识入手,深入研究相关技术,并结合性能调整及丰富的诊断案例,力图将Oracle知识全面、系统、深入地展现给读者。   本书给出了大量取自实际工作现场的实例,在分析实例的过程中,兼顾深度与广度,不仅对实际问题的现象、产生原因和相关的原理进行了深入浅出的讲解,更主要的是,结合实际应用环境,提供了一系列解决问题的思路和方法,包括详细的操作步骤,具有很强的实战性和可操作性,适用于具备一定数据库基础、打算深入学习Oracle技术的数据库从业人员,尤其适用于入门、进阶以及希望深入研究Oracle技术的数据库管理人员。 目录 第1 数据库的启动和关闭   1.1 数据库的启动   1.2 数据库的访问   1.3 数据库的关闭  第2 控制文件与数据库初始化   2.1 控制文件的内容   2.2 SCN   2.3 检查点(Checkpoint)   2.4 数据库的初始化  第3 参数参数文件   3.1 初始化参数的分类   3.2 参数文件   3.3 诊断案例之一:参数文件   3.4 诊断案例之二:RAC环境参数文件  第4 数据字典   4.1 数据字典概述   4.2 内部RDBMS(X$)表   4.3 数据字典表   4.4 静态数据字典视图   4.5 动态性能视图   4.6 最后的验证  第5 内存管理   5.1 PGA管理   5.2 SGA管理   5.3 Oracle的内存分配和使用  第6 Buffer Cache与Shared Pool原理   6.1 Buffer Cache原理   6.2 Shared Pool的基本原理  第7 重做(Redo)   7.1 Redo的作用   7.2 Redo的原理   7.3 Redo与Latch   7.4 Oracle 9i Redo的增强   7.5 Oracle 10g Redo的增强   7.6 Redo的内容   7.7 产生多少Redo   7.8 Redo写的触发条件   7.9 Redo Log Buffer的大小设置   7.10 commit做了什么?   7.11 日志的状态   7.12 日志的块大小   7.13 日志文件的大小   7.14 如何调整日志文件大小   7.15 为什么热备份期间产生的Redo要比正常的多   7.16 能否不生成Redo   7.17 Redo故障的恢复   7.18 诊断案例一:通过Clear日志恢复数据库   7.19 诊断案例二:日志组过度激活的诊断   附录 数值在Oracle的内部存储  第8 回滚与撤销   8.1 什么是回滚和撤销   8.2 回滚段存储的内容   8.3 并发控制和一致性读   8.4 回滚段的前世今生   8.5 Oracle 10g的UNDO_RETENTION管理增强   8.6 UNDO_RETENTION的内部实现   8.7 Oracle 10g In Memory Undo新特性   8.8 Oracle 11g UNDO表空间备份增强   8.9 回滚机制的深入研究   8.10 Oracle 9i闪回查询的新特性   8.11 使用ERRORSTACK进行错误跟踪   8.12 Oracle 10g闪回查询特性的增强   8.13 ORA-01555成因与解决   8.14 Oracle 11g闪回数据归档   8.15 AUM下如何重建UNDO表空间   8.16 使用Flashback Query恢复误删除数据   8.17 诊断案例之一:释放过度扩展的UNDO空间   8.18 特殊情况的恢复   8.19 诊断案例之二:回滚段损坏的恢复  第9 等待事件   9.1 等待事件的源起   9.2 从等待发现瓶颈   9.3 Oracle 10g的增强   9.4 顶级等待事件   9.5 重要等待事件  第10 性能诊断与SQL优化   10.1 使用AUTOTRACE功能辅助SQL优化   10.2 获取SQL执行计划的方法   10.3 捕获问题SQL解决过度CPU消耗问题   10.4 使用SQL_TRACE/10046事件进行数据库诊断   10.5 使用物化视图进行翻页性能调整   10.6 一次横跨两岸的问题诊断   10.7 总结
深入解析OracleDBA入门进阶与诊断案例 扫描版 作  者:盖国强 著 出 版 社:人民邮电出版社 出版时间:2009-1-1 页  数:527 内容简介   针对数据库的启动和关闭、控制文件与数据库初始化、参数参数文件、数据字典、内存管理、Buffer Cache与Shared Pool原理、重做、回滚与撤销、等待事件、性能诊断与SQL优化等几大Oracle热点主题,本书从基础知识入手,深入研究相关技术,并结合性能调整及丰富的诊断案例,力图将Oracle知识全面、系统、深入地展现给读者。   本书给出了大量取自实际工作现场的实例,在分析实例的过程中,兼顾深度与广度,不仅对实际问题的现象、产生原因和相关的原理进行了深入浅出的讲解,更主要的是,结合实际应用环境,提供了一系列解决问题的思路和方法,包括详细的操作步骤,具有很强的实战性和可操作性,适用于具备一定数据库基础、打算深入学习Oracle技术的数据库从业人员,尤其适用于入门、进阶以及希望深入研究Oracle技术的数据库管理人员。 目录 第1 数据库的启动和关闭   1.1 数据库的启动   1.2 数据库的访问   1.3 数据库的关闭  第2 控制文件与数据库初始化   2.1 控制文件的内容   2.2 SCN   2.3 检查点(Checkpoint)   2.4 数据库的初始化  第3 参数参数文件   3.1 初始化参数的分类   3.2 参数文件   3.3 诊断案例之一:参数文件   3.4 诊断案例之二:RAC环境参数文件  第4 数据字典   4.1 数据字典概述   4.2 内部RDBMS(X$)表   4.3 数据字典表   4.4 静态数据字典视图   4.5 动态性能视图   4.6 最后的验证  第5 内存管理   5.1 PGA管理   5.2 SGA管理   5.3 Oracle的内存分配和使用  第6 Buffer Cache与Shared Pool原理   6.1 Buffer Cache原理   6.2 Shared Pool的基本原理  第7 重做(Redo)   7.1 Redo的作用   7.2 Redo的原理   7.3 Redo与Latch   7.4 Oracle 9i Redo的增强   7.5 Oracle 10g Redo的增强   7.6 Redo的内容   7.7 产生多少Redo   7.8 Redo写的触发条件   7.9 Redo Log Buffer的大小设置   7.10 commit做了什么?   7.11 日志的状态   7.12 日志的块大小   7.13 日志文件的大小   7.14 如何调整日志文件大小   7.15 为什么热备份期间产生的Redo要比正常的多   7.16 能否不生成Redo   7.17 Redo故障的恢复   7.18 诊断案例一:通过Clear日志恢复数据库   7.19 诊断案例二:日志组过度激活的诊断   附录 数值在Oracle的内部存储  第8 回滚与撤销   8.1 什么是回滚和撤销   8.2 回滚段存储的内容   8.3 并发控制和一致性读   8.4 回滚段的前世今生   8.5 Oracle 10g的UNDO_RETENTION管理增强   8.6 UNDO_RETENTION的内部实现   8.7 Oracle 10g In Memory Undo新特性   8.8 Oracle 11g UNDO表空间备份增强   8.9 回滚机制的深入研究   8.10 Oracle 9i闪回查询的新特性   8.11 使用ERRORSTACK进行错误跟踪   8.12 Oracle 10g闪回查询特性的增强   8.13 ORA-01555成因与解决   8.14 Oracle 11g闪回数据归档   8.15 AUM下如何重建UNDO表空间   8.16 使用Flashback Query恢复误删除数据   8.17 诊断案例之一:释放过度扩展的UNDO空间   8.18 特殊情况的恢复   8.19 诊断案例之二:回滚段损坏的恢复  第9 等待事件   9.1 等待事件的源起   9.2 从等待发现瓶颈   9.3 Oracle 10g的增强   9.4 顶级等待事件   9.5 重要等待事件  第10 性能诊断与SQL优化   10.1 使用AUTOTRACE功能辅助SQL优化   10.2 获取SQL执行计划的方法   10.3 捕获问题SQL解决过度CPU消耗问题   10.4 使用SQL_TRACE/10046事件进行数据库诊断   10.5 使用物化视图进行翻页性能调整   10.6 一次横跨两岸的问题诊断   10.7 总结

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qtayu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值