博客
关于我
tensorflow神经网络优化方法笔记
阅读量:601 次
发布时间:2019-03-11

本文共 1858 字,大约阅读时间需要 6 分钟。

神经网络优化总结

梯度下降

梯度下降算法不一定达到全局最优,且计算成本较高,因为它在所有数据上计算损失函数。通常采用随机梯度下降算法,该算法每次仅优化某一条训练数据的损失函数。然而,仅优化一条数据点的损失函数可能无法反映整体损失函数的最优解。为此,结合批量处理(Batch)算法,每次计算一小批训练数据(Batch)的损失函数,这种折衒可以显著减少迭代次数,同时使结果更接近梯度下降的效果。

学习率指数衰减

学习率的大小直接影响算法的收敛速度与稳定性。TensorFlow中使用指数衰减法管理学习率。这种方法通过初始设置较大的学习率,使模型快速收敛,在此过程中逐步减小学习率,保证训练后期的稳定性。tf.train.exponential_decay实现这一功能,其公式为:[ \text{decayed_learning_rate} = \text{learning_rate} \times \text{decay_rate}^{(\text{global_step} / \text{decay_steps})} ]参数说明:

  • learning_rate: 初始学习率
  • decay_rate: 衰减系数,通常在0-1之间
  • staircase: 是否为阶梯式衰减,默认值为False

正则化

正则化(L1和L2)通过限制权重大小,防止模型过于依赖训练数据中的噪声。L1正则化使参数更稀疏(许多权重为零),而L2正则化则不会强制权重为零。L1正则化不可导,L2可导。在TensorFlow中,可以通过tf.contrib.layers.l2ertino Regularizer添加L2正则化项。以下代码示例实现简单卷积神经网络并添加L2正则化:

import tensorflow as tffrom tensorflow.contrib.layers import l2_regularizerdef get_weight(shape, lambda1):    var = tf.Variable(tf.random_normal(shape), dtype=tf.float32)    tf.add_to_collection('losses', tf.contrib.layers.l2_regularizer(lambda1)(var))    return varx = tf.placeholder(tf.float32, (None, 2))y = tf.placeholder(tf.float32, (None, 1))batch_size = 8layer_dimensions = [2, 10, 10, 10, 1]for i in range(1, len(layer_dimensions)):    out_dimension = layer_dimensions[i]    weight = get_weight([layer_dimensions[i-1], out_dimension], 0.001)    bias = tf.Variable(tf.constant(0.1, shape=[out_dimension]))    cur_layer = tf.nn.relu(tf.matmul(cur_layer, weight) + bias)    layer_dimensions[i] = out_dimensionmse_loss = tf.reduce_mean(tf.square(y - cur_layer))tf.add_to_collection('losses', mse_loss)loss = tf.add_n(tf.get_collection('losses'))

动量(Momentum)

动量优化器通过保持一定的“动量”,加速训练过程中的权重更新。动量的公式为:[ v = \mu v - \text{learning_rate} \times dw ][ w = w + v ]其中,v初始化为0,μ通常设定为0.9。动量的引入可以加速收敛,避免因权重更新方向不一致而迟缓。

滑动平均优化器

平滑率(Exponential Moving Average,EMA)的衰减率可以设置接近1,使模型训练更稳健。tf.train.ExponentialMovingAverage实现这一功能,常用参数为num_step,确定衰减步骤数。

转载地址:http://mkivz.baihongyu.com/

你可能感兴趣的文章
Qt开发——网络编程UDP网络广播软件之服务器端
查看>>
Postgresql 12.9如何配置允许远程连接
查看>>
PostgreSQL 9.6 同步多副本 与 remote_apply事务同步级别 应用场景分析
查看>>
Postgresql CopyManager 流式批量数据入库
查看>>
PostgreSQL cube 插件 - 多维空间对象
查看>>
PostgreSQL Daily Maintenance - cluster table
查看>>
PostgreSQL on Linux 最佳部署手册
查看>>
PostgreSQL Oracle 兼容性之 - pipelined
查看>>
PostgreSQL Point-In-Time Recovery (Incremental Backup)
查看>>
postgresql Streaming Replication监控与注意事项
查看>>
postgresql 不需要付费_使用数据传输在PostgreSQL执行 外部连接运算符
查看>>
postgresql 主从配置_生产环境postgresql主从环境配置
查看>>
postgresql 函数&存储过程 ; 递归查询
查看>>
PostgreSQL 分组聚合查询中 filter 子句替换 case when
查看>>
PostgreSQL 同步流复制锁瓶颈分析
查看>>
PostgreSQL 备份与还原命令 pg_dump
查看>>
Postgresql 外部表插件postgres_fdw的安装和使用
查看>>
PostgreSQL 如何从崩溃状态恢复(上)
查看>>
PostgreSQL 存储过程基本语法
查看>>
PostgreSQL 实现批量更新、删除、插入
查看>>