正则化

神经网络中的反向传播法

孤街浪徒 提交于 2019-11-28 19:30:26
直观理解反向传播法 反向传播算法其实就是 链式求导法则 的应用。按照机器学习的通用套路,我们先确定神经网络的目标函数,然后用 随机梯度下降优化算法 去求目标函数最小值时的参数值。 反向传播算法 损失函数与正则化项 假设我们有一个固定样本集 \(\{(x^{(1)},y^{(1)}),···,(x^{(m)},y^{(m)})\}\) 它包含m个样本。我们可以用批量梯度下降法来求解神经网络。具体来讲,对于单个样例(x,y),其代价函数为: \[J(W,b;x,y)=\frac{1}{2}||h_{W,b}{(x)}-y||^2\] 这是一个 平方误差损失函数 。(这里的 \(\frac{1}{2}\) 是当求导时,平方会产生一个2, \(\frac{1}{2}*2=1\) 进行平均不让2累积) 对于包含m个样本的数据集,我们可以定义整体的损失函数为: \[J\left(W,b\right)=\left[\frac{1}{m}\sum_{i=1}^m{J\left(W,b;x^{\left(i\right)},y^{\left(j\right)}\right)}\right]+\frac{\lambda}{2}\sum_{l=1}^{n_l-1}{\sum_{i=1}^{s_l}{\sum_{j=1}^{s_{l+1}}{\left(W_{ji}^{\left(l\right)}

2.3 超参数调试,batch正则化和程序框架

心已入冬 提交于 2019-11-28 15:29:05
1.调试   1.1 超参数调试重要性顺序:               1. $\alpha$               2.$\beta$,  hidden units,  mini-batch size               3.layers,  learning rate decay             其他:若采用adam,则直接设定$\beta_{1}=0.9, \beta_{2}=0.999, \epsilon=10^{-8}$   1.2 为超参数选择合适范围   当超参数变化范围是[1,4]时,很显然可以采用在区间内取均值的方法。   但是,考虑学习率的变化范围,例如[0.0001, 1],此时如果在区间内随机均匀取值显然是不合理的。解决方法是我们可以在$[log_{10}^{0.0001},log_{10}^{1}]$内,即[-4, 0]内随机均匀取值。   类似的,当考虑$\beta$的区间为[0.9, 0.999]时,我们可以将$1-\beta$在[0.1, 0.001]内随机均匀取值。   1.3 两种超参数训练方法:pandas,caviar   panda:耐心在训练过程中一天天观察效果并调试参数   caviar:一次训练多个具有不同超参数的模型 2. batch归一化   batch norm会有一点正则化的效果,mini-batch

l1和l2正则化

梦想的初衷 提交于 2019-11-28 10:05:16
https://blog.csdn.net/tianguiyuyu/article/details/80438630 以上是莫烦对L1和L2的理解 l2正则:权重的平方和,也就是一个圆 l1正则:权重的绝对值之和,等价与一个正方形。 图中,正则项和损失项的交点就是最优解的位置,我们可以看到,在只有2个参数的情况下,l1倾向使得某个参数直接为0;l2倾向使得某些参数逼近0 再看下吴恩达的理解 正则化的意义:在于让高阶的参数逼近0,使其对拟合函数的贡献变小;可以看到theta3和theta4,我们给他很高的系数,在求解最小值的过程中,我们更倾向给theta3和theta4更大的惩罚,使之变得很小很小。 这是某个损失函数增加了L2正则化后的loss 下面是针对加了L2损失函数的梯度下降求解过程 来源: https://www.cnblogs.com/ivyharding/p/11404202.html

机器学习(二):如何使用机器学习来解决一个问题?

馋奶兔 提交于 2019-11-28 09:50:54
给定一个问题,如何设计机器学习系统来解决此问题? 1. 机器学习流水线 1.1设计问题的流水线 什么是“machine learning pipeline”?对于一个由多个阶段/模块组成的系统,当系统中含有机器学习的阶段/模块时,我们就说这是一个机器学习流水线。 Photo OCR问题:识别图片中的文字。 我们将这一问题分成三部分:首先是检测到图片中存在文字的部分,然后将文字分割成一个个的字符,最后识别每一个字符。 其流水线如下: 这样我们就可以分模块的进行机器学习算法设计了。 假设三个模块都使用机器学习算法,而且对于每一个模块,都有一个简单的机器学习算法。 现在我们想要改进整个系统的性能,那么,从哪个模块开始改进比较好? 1.2 使用ceiling analysis决定下一步的工作 如图所示: 使用测试数据集test set: 1. 首先得出最初整个系统的准确率为72%; 2. 采用人工标记的方式,将text detection的输出校正,使得text detection的准确率为100%,此时得到整个系统的准确率为89%; 3. 采用人工标记的方式,将Character segmentation的输出校正,使其准确率为100%,此时得到整个系统的准确率为90%; 4. 采用人工标记的方式,将Character recognition的输出校正,使其准确率为100%

深度学习_调参经验

时光怂恿深爱的人放手 提交于 2019-11-28 05:17:27
面对一个图像分类问题,可以有以下步骤: 1.建立一个简单的CNN模型,一方面能够快速地run一个模型,以了解这个任务的难度 卷积层1 :卷积核大小3*3,卷积核移动步长1,卷积核个数64,池化大小2*2,池化步长2,池化类型为最大池化,激活函数ReLU。 卷积层2 :卷积核大小3*3,卷积核移动步长1,卷积核个数128,池化大小2*2,池化步长2,池化类型为最大池化,激活函数ReLU。 卷积层3 :卷积核大小3*3,卷积核移动步长1,卷积核个数256,池化大小2*2,池化步长2,池化类型为最大池化,激活函数ReLU。 全连接层 :隐藏层单元数1024,激活函数ReLU。 分类层 :隐藏层单元数10,激活函数softmax。 参数初始化,所有权重矩阵使用random_normal(0.0, 0.001),所有偏置向量使用constant(0.0)。使用cross entropy作为目标函数,使用Adam梯度下降法进行参数更新,学习率设为固定值0.001。 该网络是一个有三层卷积层的神经网络,能够快速地完成图像地特征提取。全连接层用于将图像特征整合成分类特征,分类层用于分类。cross entropy也是最常用的目标函数之一,分类任务使用cross entropy作为目标函数非常适合。Adam梯度下降法也是现在非常流行的梯度下降法的改进方法之一,学习率过大会导致模型难以找到较优解

线性回归模型的sklearn实现

本秂侑毒 提交于 2019-11-28 04:04:54
关于线性回归模型的知识总结,请参见 这里 。此处主要介绍线性模型的相关算法在sklearn中的实现: 一、线性回归(最小二乘法) from sklearn.linear_model import LinearRegression X, y = mglearn.datasets.make_wave(n_samples=60)#导入数据 X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42) lr = LinearRegression().fit(X_train, y_train)#拟合模型 print("lr.coef_: {}".format(lr.coef_))#输出系数(斜率) print("lr.intercept_: {}".format(lr.intercept_))#输出截距(偏移量) #准确率(模型效果) print("Training set score: {:.2f}".format(lr.score(X_train, y_train))) print("Test set score: {:.2f}".format(lr.score(X_test, y_test))) #用训练好的模型求新数据的值 lr.predict(X_test) 二、岭回归

LASSO回归和Ridge回归

淺唱寂寞╮ 提交于 2019-11-28 03:46:57
在 线性回归 中讲述了原理,为了防止过拟合经常会加入正则化项。常用的正则化有L1正则化和L2正则化。 1.LASSO回归 加入L1正则化项的线性回归就叫LASSO回归。L1正则化项即是参数的L1范数,通俗点说,就是参数向量各个分量取绝对值的加和,即,对于 \(\theta=(\theta_0, \theta_1, \cdots, \theta_n)^T\) 参数向量,L1正则化项为: \[ \left \| \theta \right \|_1 = \sum_{j=0}^n | \theta_j | \] 通常会加入一个系数 \(\lambda\) 来调节正则化项的权重,因此LASSO回归的目标函数(损失函数)为: \[ J(\theta) = \frac{1}{2}\sum_{i=1}^m(h(x^{(i)})-y^{(i)})^2 + \lambda \sum_{j=0}^n | \theta_j | = \frac{1}{2}\left(X\theta-Y\right)^T\left(X\theta-Y\right) + \lambda\left \| \theta \right \|_1 \] LASSOS回归可以使得一些特征的系数为零(即某些 \(\theta_j\) 为零),即得到稀疏解。 由于 \(|\theta_j|\) 求不了导,所以在实际应用中,可以寻求近似解

tensorflow学习——keras高级API——序列模型Sequential

感情迁移 提交于 2019-11-28 02:28:41
Tensorflow官网 Keras是一个用于构建和训练深度学习模型的 高阶API 。它可用于 快速设计原型 ,高级研究和生产,具有以下三个优势: 方便用户使用 Keras具有针对常见用例做出 优化的简单而一致的界面 。它可针对用户错误提供切实可行的 清晰反馈 。 模块化和可组合 将可配置的 构造快连接在一起 就可以构建Keras模型,并且几乎不受限制。 易于扩展 可以 自关系编写定义构造块 以表达新的研究创意,并且可以创建新层,损失函数并开发先进模型。 构建简单模型 序列模型 在Keras中,可以通过组合层来构建模型。模型通常是由层构成的图。最常见的模型类型是 堆层 : tf.keras.Sequential 模型。 构建一个简单的 全连接的网络 。 model = tf.keras.Sequential() # Adds a densely-connected layer with 64 units to the model: model.add(layers.Dense(64, activation='relu')) # Add another: model.add(layers.Dense(64, activation='relu')) # Add a softmax layer with 10 output units: model.add(layers.Dense(10

2.1 深度学习的实用层面

别等时光非礼了梦想. 提交于 2019-11-28 01:03:11
1. 训练集,验证集,测试集   当数据量较小时,可以分别占60%, 20%, 20%,当数据集规模很大时,验证集和测试集所占比例可以很小。 2.偏差和方差  2.1判断   我们可以根据训练集误差,判断数据拟合情况,判断是否有偏差问题。之后根据验证集误差,判断方差是否过高。  2.2 解决   针对高偏差(欠拟合):使用更复杂网络,花费更多时间训练算法或者是用优化算法,(或者采用新架构)   针对高方差(过拟合):采用更多数据,正则化,(新架构) 3.正则化 3.1 正则化预防过拟合的原因   正则化参数λ变大时,W变小,Z变小,激活函数会相对呈线性,整个神经网络会计算离线性网络近的值(神经网络会变简单,所以避免了过拟合)。 3.2 正则化方法   L2   L1   dropout   在不便引入新的数据时将图片翻转或剪裁(数据扩增),   early stopping。绘制验证集误差 4.梯度消失与梯度爆炸 5. 作业   1. 初始化参数:不同的初始化参数导致不同结果   将所有W初始化为0 ,这将导致"break symmetry", 例子中识别准确率50%   所有参数随机初始化并将规模*10,导致梯度下降缓慢,迭代次数过多,识别准确率83%   He初始化(推荐激活函数为relu的层使用),在随机初始化的规模设为sqrt(2./layers_dims[l-1])

【论文阅读】Prior Knowledge Integration for Neural Machine Translation using Posterior Regularization

﹥>﹥吖頭↗ 提交于 2019-11-28 00:50:16
本文在参考一些网上资料的基础上,对该论文的思想和重要步骤作出了总结,也加入了在与身边朋友讨论的过程中对文章更细致深入的理解的内容,同时包含了自己在阅读中发现需要了解的背景知识的简单介绍。 目录 概述 背景知识 先验 后验 似然估计 正则化 KL散度 EM算法 log-linear model对数线性模型 Posterior Regularization后验正则化 模型 特征设计 训练 目标 编码 解码 结果 结论 参考资料 概述 这篇搜狗联合清华信息科学与技术国家实验室进行研究、入选ACL 2017的论文提出了将 先验知识 集成到NMT中并保持模型结构不变的一般框架。使用的主要方法是 后验正则化 ,将先验知识表征为对数线性模型中的特征,用来指导NMT的过程。 论文希望解决的问题就是如何将多个重叠的、任意的先验知识集成到神经网络中。一方面,神经网络中用来表示翻译过程中涉及的语言结构的向量的值是连续的。虽然这些向量的表示确实隐含着翻译规则,但很难从语言学的角度来解释。作者对此提出了 四种特征设计方式 对语言学中的先验知识进行编码; 另一方面,在将先验知识编码成翻译规则时,一般都用离散的表达形式(比如词典),将这种离散形式转化为神经网络所要求的连续表示是一件困难的事情。因此作者采用了 对数线性模型 ,代替原来的离散集合表示。 论文链接 背景知识 在了解论文主要工作之前