1.Keras 中的多梯度下度下 Adam 优化器(Optimizer)算法+源码研究
2.Python实现岭回归(Ridge Regression)
3.深度语义匹配模型DSSM及其变体CNN-DSSM, LSTM-DSSM
4.scikit-learn学习笔记(6)--神经网络
Keras 中的 Adam 优化器(Optimizer)算法+源码研究
在深度学习训练中,Adam优化器是降算降法一个不可或缺的组件。它作为模型学习的法源指导教练,通过调整权值以最小化代价函数。码多在Keras中,元梯Adam的多梯度下度下ai小说源码使用如keras/examples/mnist_acgan.py所示,特别是降算降法在生成对抗网络(GAN)的实现中。其核心参数如学习率(lr)和动量参数(beta_1和beta_2)在代码中明确设置,法源参考文献1提供了常用数值。码多
优化器的元梯本质是帮助模型沿着梯度下降的方向调整权值,Adam凭借其简单、多梯度下度下高效和低内存消耗的降算降法特点,特别适合非平稳目标函数。法源它的码多更新规则涉及到一阶(偏斜)和二阶矩估计,以及一个很小的元梯数值(epsilon)以避免除以零的情况。在Keras源码中,Adam类的实现展示了这些细节,包括学习率的动态调整以及权值更新的计算过程。
Adam算法的一个变种,Adamax,通过替换二阶矩估计为无穷阶矩,提供了额外的优化选项。对于想要深入了解的人,可以参考文献2进行进一步研究。通过理解这些优化算法,我们能更好地掌握深度学习模型的训练过程,从而提升模型性能。
Python实现岭回归(Ridge Regression)
项目专栏: Python实现经典机器学习算法附代码+原理介绍
前言
我的项目环境:
项目专栏: Python实现经典机器学习算法附代码+原理介绍
一、基于原生Python实现岭回归(Ridge Regression)
岭回归(Ridge Regression)是一种常见的线性回归的扩展形式,它通过引入 L2正则化项 来解决线性回归模型中可能存在的过拟合问题。
线性回归模型的预测函数为:
其中,[公式]是预测值,[公式]是特征值,[公式]是好品推源码模型参数。
线性回归模型的损失函数是平方损失函数:
其中,[公式]是样本数量,[公式]是第[公式]个样本的真实标签值,[公式]是第[公式]个样本的预测标签值。
当特征数量[公式]很大时,线性回归模型可能会出现过拟合的现象,即模型在训练数据上表现良好,但在测试数据上表现较差。为了解决过拟合问题,我们可以通过引入正则化项来限制模型参数的取值范围,从而使模型更加稳定。
岭回归通过引入L2正则化项来限制模型参数的取值范围,其损失函数为:
其中,[公式]是正则化系数,用来控制正则化的强度。[公式]是L2正则化项,用来限制模型参数的取值范围。
岭回归的优化目标是最小化损失函数,即:
岭回归的参数可以通过解析解 或 迭代优化方法(如梯度下降) 来得到。
本篇文章我们采用Python语言实现经典的机器学习算法Ridge Regression 。
二、正则化项介绍
在机器学习中,正则化(Regularization)是一种常用的技术,它通过在目标函数中增加一个 惩罚项 来控制模型的复杂度,从而防止过拟合问题的出现。
正则化项通常添加在模型的损失函数(目标函数)中,它的一般形式如下:
其中,L(w)是损失函数,y是实际标签值,f(x; w)是模型的预测值,w是模型的参数,λ是正则化系数,R(w)是php招生系统源码正则化项。
正则化项R(w)可以有多种形式,常见的有L1正则化 和 L2正则化 两种。
L1正则化的作用是使部分系数变为0,从而实现特征选择和降维。
L2正则化的作用是使系数向量w的每个分量都尽可能小,从而防止过拟合问题的出现。
正则化项的正则化系数λ 可以通过交叉验证等方法来确定,通常取值范围为 0到1 之间的实数,数值越大,正则化项的惩罚力度越强,模型越倾向于选择较小的系数。
三、岭回归的算法原理
岭回归的算法原理可以分为两步:参数估计和预测。
在预测时,我们可以使用模型得到的参数[公式]来预测新的样本的标签值。需要注意的是,在预测时,我们需要对新样本的特征值进行标准化处理,使其和训练集的特征值处于同样的尺度范围。
以上就是岭回归的算法原理,需要注意的是,在实际应用中,我们需要对正则化系数进行调参,以达到最优的模型效果。常用的调参方法有网格搜索和交叉验证等。
四、算法实现
本部分将讲解如何使用原生Python来实现Ridge回归,本文并没有直接使用sklearn 中的 Ridge,而是利用纯Python实现一个效果一致的Ridge Regression,因为这样才能够帮新手小白理解算法内部的具体流程。
3.1 导包
对于本项目主要使用到的第三方库有以下几种,都是比较常见的
3.2 搭建岭回归算法
以下代码实现了岭回归模型,通过自己实现的800楼论坛源码方法和sklearn库中的Ridge模型进行比较。
3.2.1 初始化模型参数
在下面搭建的RidgeRegression类中,__init__ 方法是类的初始化方法,主要用于初始化RidgeRegression类的参数。该方法的输入参数如下:
3.2.2 模型训练
LassoRegression类的fit 方法用于训练 岭回归 模型,其主要功能是根据输入的特征矩阵 X 和标签 y 来更新模型的系数 self.coef_ 和 self.intercept_。
注:这里为什么没有使用梯度下降法来迭代更新参数呢?
岭回归的参数更新是通过解析解得到的,而不是通过梯度下降。这是因为岭回归的损失函数是一个带有L2正则化项的二次函数,它的解析解可以直接通过求导和矩阵运算得到。使用解析解可以避免梯度下降所带来的局部最优问题,同时也可以提高算法的计算效率。
具体来说,岭回归的损失函数为:
其中,[公式]是[公式]的设计矩阵,[公式]是[公式]的参数向量,[公式]是[公式]的目标向量,[公式]是正则化系数。
对损失函数求导,得到最优参数[公式]的解析解:
其中,[公式]是[公式]的单位矩阵。
因此,岭回归可以直接通过矩阵运算计算最优参数[公式],而不需要使用梯度下降。
3.2.3 模型预测
RidgeRegression类的predict 方法用于使用训练好的Ridge回归模型进行预测,其主要功能是根据输入的特征矩阵 X 来预测相应的标签值。
3.2.4 完整岭回归模型
完整的岭回归模型定义如下:
3.3 定义数据
为了测试模型,我们使用了如下代码来生成回归的数据集,该代码用于生成一个具有线性关系的数据集,其中:
函数的返回值X 和 y 分别表示生成的数据集的特征矩阵和响应变量向量。生成的数据集包含了一个线性关系,其中特征矩阵X和响应变量y之间的关系为 y = Xw + b + e,其中 w 是一个真实的权重向量,b 是帝国 软件销售源码一个常数偏置项,e 是一个高斯噪声项。
3.4 对比自实现模型与官方Ridge模型效果
然后我们使用如下代码通过自己实现的方法和sklearn 库中的Ridge模型进行比较。
效果如下:
可以看到,自己实现的Ridge回归模型和sklearn的Ridge回归模型的参数和均方误差非常接近,证明了自己实现的Ridge回归模型的正确性和有效性。
3.6 测试模型
通过如下代码,我们可以查看Ridge模型预测值与真实值之间的MSE 和 R2 等指标,查看模型训练的效果如何。
模型的测试结果如下:
3.7 可视化结果
为了查看效果可以用matplotlib 库将真实数据和预测结果可视化:
上图蓝色曲线为自实现Ridge模型的预测结果,橙色曲线为sklearn中的Ridge模型的预测结果,绿色曲线未真实标签。可以看到,预测结果和真实值基本吻合,证明了RidgeRegression模型的有效性。
完整源码
深度语义匹配模型DSSM及其变体CNN-DSSM, LSTM-DSSM
在研究推荐和排序算法的过程中,DSSM(深度结构语义模型)是不可或缺的一部分。本文将详细介绍DSSM及其变体CNN-DSSM和LSTM-DSSM。
论文链接:microsoft.com/en-us/res...
源码:github.com/baharefatemi...
简介
现代搜索引擎在检索文章时,通常将文章中的关键字与query中的内容进行比较。然而,这种做法存在一个问题,即文字具有多义性,同样的含义可以用多种表达方式进行表达。因此,我们需要对query和document进行语义上的相似度匹配。
通常,我们会使用隐语义模型LSA、LDA来衡量Query和Document之间的相似性。然而,由于LSA、LDA是无监督学习的模型,这些模型的效果并不符合预期。基于隐语义模型,有两种扩展:第一种是使用BLTM结合DPM来拟合query和document之间的关系,另一种方法是采用深度模型对query和document进行自编码,但这两种方法都是无监督的方法。
本文针对搜索场景,提出了一系列深度网络语义模型(Deep Structured Semantic Models),模型的核心思想是:首先将query和document映射到同一个低维语义空间,然后通过cosine来计算query和document之间的距离。与之前的无监督学习模型不同,DSSM使用document的点击量进行训练,因此DSSM的效果要优于其他无监督模型。
接下来,我们来看看DSSM是如何对query和document进行处理的。
DSSM的结构采用DNN结构,将输入的query和document转换到低维的语义空间,然后计算他们的cosine相似度。
语义特征计算部分,首先使用DNN网络将query和document从高维的空间转换到低维的空间。对输入的query和document假设他们是x,经过转换的向量为y,[公式]表示隐藏层,[公式]分别表示隐藏层的参数和偏置。
最后一层采用tanh函数作为激活函数。最后将query和document映射到低维向量之后,我们采用cosine计算他们的相似度。
为了解决query和document在第一层维度非常大的问题,本文提出了word hashing的方法,来对文本进行降维。做法就是使用n-gram来表示一个词语,例如good,我们把它拆分成trigram:go goo ood od。
为了训练DSSM,我们需要得到query和他们对应的点击的document。作者假设如果用户点击了某个document,那么这个query和document就是相关的。因此,作者认为DSSM的目标是最大化给定query所对应的document的条件似然函数。条件似然函数的计算方式为:[公式]。其中,[公式]是平滑参数,D是针对query的所有可能相关的document集合,[公式]表示和query有关的且用户点击的document。
有了以上的介绍,我们所要最大化的条件似然函数就是[公式]。因此,loss函数就是:[公式]。文中作者采用梯度下降法来最大化loss函数。
作者收集了现实生活中用户搜索的日志作为实验的数据集,这份数据包含条用户query,平均每条query包含条url。每一个(query, document)的相关性分为5档,分别是0~4分,得分是人工评价的。模型的排序效果通过NDCG来衡量,这是推荐系统常见的评价指标,具体就是评价推荐给用户的内容是否是用户感兴趣的,而用户的阅读习惯一般是从上到下,所以我们希望将最相关的内容排在前面,然后以此类推。
实验效果如下,其中:首先我们可以看出DSSM的效果优于其他模型,并且L-WH DNN的效果是最好的。
DSSM是搜索里非常经典的一个算法,在工业界也广泛被使用。而且,根据应用场景的不同,对特征处理也会有一些区别。例如,在推荐召回模块的应用中,我们的输入可能就不再是query和doc的word embedding,而是用户和推荐的物品(例如**,商品)的特征。
本文依然是由DSSM的作者提出,在语义特征计算部分采用CNN网络,网络结构如上图所示。在词向量的表达上依然采用了word hash(不知道为啥作者对word hash这么执着)。
不过,trigram表示不能忽略了文本的上下文信息,因此作者在word trigram的基础上增加了letter trigram。在一定的窗口大小内,对该窗口内的word进行拼接就是letter trigram,例如I have an apple,可以被拼接为 # I have, I have an, ... 以此类推。
然后以上表示经过卷积层,max-pooling,和全连接之后得到query和doc的低维向量。最后计算相似度的时候还是cosine距离。
本文针对CNN-DSSM无法捕捉长文本的上下文信息的缺点,引入了LSTM。同时在LSTM的cell中加入了peehole,LSTM的cell结构如上图所示。
与传统的LSTM不同,作者在遗忘门、输入门、输出门中都考虑了[公式],总体来说考虑的信息更丰富。
scikit-learn学习笔记(6)--神经网络
神经网络(neural_network)模块中的重要类包括MLPClassifier(用于分类)和MLPRegressor(用于回归)。多层感知器(MLP)是一种监督学习算法,属于前馈人工神经网络模型,本质上是一个全连接神经网络(让我回想起看西瓜书时用Java实现全连接网络......不堪回首)。
MLPClassifier类和MLPRegressor类都使用参数alpha作为正则化(L2正则化)系数。
二、数据集
分类:鸢尾花数据集
回归:自己构造的曲线,exp函数,x范围为[-3.0, 3.0],间隔为0.1
三、函数详细介绍
多分类同样不用讨论,并且允许同时拟合多条线。
这章的详细介绍将从源码、参数、属性、结果截图和画图截图展开。
1、MLPClassifier类,多层感知机分类
原理及公式:一系列的公式和具体原理可以见西瓜书,这里不再赘述。
代码:略
结果图示:略
note:
1、各属性值含义在源码中已经说明。
2、参数:
1)、hidden_layer_sizes=():元组,同时指定隐藏层层数+每层单元数。比如(,)两层,第一层个隐藏单元,第二层个单元;
2)、activation="relu":隐藏层的激活函数,可选为{ 'identity', 'logistic', 'tanh', 'relu'},分别对应:{ f(x) = x ,f(x) = 1 / (1 + exp(-x)),f(x) = tanh(x),f(x) = max(0, x)}
3)、solver='adam':参数的优化算法,可选为{ 'lbfgs', 'sgd', 'adam'},分别对应{ 拟牛顿法,随机梯度下降,基于随机梯度下降的自适应}的具体实现算法
4)、alpha=0.:L2正则化参数
5)、batch_size='auto':对于随机优化器来说是可选的,批大小,设为auto时为min(,n_SAMPLES)
6)、learning_rate="constant":参数更新时的学习率,只在solver='sgd'时有效,可选为{ 'constant', 'invscaling', 'adaptive'},分别对应{ 常数即=初始学习率,逐渐降低,自适应}
7)、learning_rate_init=0.:初始学习率,只在solver='sgd' 或'adam'起作用
8)、power_t=0.5:影响learning_rate=" invscaling "时的学习率降低(有个计算公式effective_learning_rate = learning_rate_init / pow(t, power_t),t表示时间步)
9)、max_iter=:最大迭代轮数
)、tol=1e-4:损失值容忍阈值,小于该值时停止训练
2、MLPRegressor类,多层感知机回归
原理及公式:本来输出的就是连续值,用来做分类要加上softmax层,这里只是去掉该层
代码:略
结果图示:略
note:
1、参数同分类,无新参数需要说明
2、各属性值含义亦同。