| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> 李宏毅《深度学习》(三) -> 正文阅读 |
|
[人工智能]李宏毅《深度学习》(三) |
人工智能的浪潮正在席卷全球,诸多词汇时刻萦绕在我们耳边:人工智能(Artificial Intelligence)、机器学习(Machine Learning)、深度学习(Deep Learning)。本文主要是对李宏毅课程内容进行笔记梳理,参考链接在文末已经给出。 5-误差从哪来?Error的来源定义与理解Error = Bias(偏差) + Variance(方差)
举一个例子,一次打靶实验,目标是为了打到10环,但是实际上只打到了7环,那么这里面的Error就是3。具体分析打到7环的原因,可能有两方面:
还有其他的解释方式,例如经典的靶子图
方差与偏差与欠、过拟合的关系一般来说,简单的模型会有一个较大的偏差和较小的方差,复杂的模型偏差较小方差较大。这也引申出欠拟合和过拟合的概念。
在一个实际系统中,Bias与Variance往往是不能兼得的。如果要降低模型的Bias,就一定程度上会提高模型的Variance,反之亦然,如下图所示: 如何处理方差与偏差问题?整体思路: 首先,要知道方差和偏差是无法完全避免的,只能尽量减少其影响。
针对偏差和方差的思路: 偏差:实际上也可以称为避免欠拟合
可以参考查看 机器学习中的Bias(偏差),Error(误差),和Variance(方差)有什么区别和联系? 偏差 - 方差权衡
添加正则化项(Regularization)相当于对模型参数施加惩罚,压缩了参数的范围,限制了模型的复杂度,从而有助于缓解模型过拟合问题,选择不同的 正则化项权重λ 对模型的影响如下。
在《西瓜书》中也会有这种描述:泛化误差=偏差+方差+噪声 其误差的期望值可以分解为三个部分:样本噪音、模型预测值的方差、预测值相对真实值的偏差 公式为: 即:误差的期望值 = 噪音的方差 + 模型预测值的方差 + 预测值相对真实值的偏差的平方
模型选择现在在偏差和方差之间就需要一个权衡 想选择的模型,可以平衡偏差和方差产生的错误,使得总错误最小,对于模型的选择有以下的方法,比如我们拥有三个模型,我们要验证哪种模型表现最好。 交叉验证图中public的测试集是已有的,private是没有的,不知道的。交叉验证 就是将训练集再分为两部分,一部分作为训练集,一部分作为验证集。用训练集训练模型,然后再验证集上比较,确实出最好的模型之后(比如模型3),再用全部的训练集训练模型3,然后再用public的测试集进行测试,此时一般得到的错误都是大一些的。不过此时会比较想再回去调一下参数,调整模型,让在public的测试集上更好,但不太推荐这样。 上述方法可能会担心将训练集拆分的时候分的效果比较差怎么办,可以用下面的方法。 N-折交叉验证将训练集分成N份,比如分成3份,然后在其中将每一份分别作为验证集去训练N次三种模型,然后将每个模型N次的平均error作为最终的评判标准。 比如在三份中训练结果Average错误是模型1最好,再用全部训练集训练模型1。 6-梯度下降在回归问题的第三步中,需要解决下面的最优化问题:
这里的parameters是复数,即 θ?指代一堆参数。 我们要找一组参数θ?,让损失函数越小越好,这个问题可以用梯度下降法解决。分别计算初始点处,两个参数对?L?的偏微分,然后? θ 0 \theta^0 θ0?减掉? η \eta η?乘上偏微分的值,得到一组新的参数。(η?叫做Learning rates(学习速率))。 调整学习速率小心地调整学习速率解决方法就是上图右边的方案,将参数改变对损失函数的影响进行可视化。比如学习率太小(蓝色的线),损失函数下降的非常慢;学习率太大(绿色的线),损失函数下降很快,但马上就卡住不下降了;学习率特别大(黄色的线),损失函数就飞出去了;红色的就是差不多刚好,可以得到一个好的结果。 虽然这样的可视化可以很直观观察,但可视化也只是能在参数是一维或者二维的时候进行,更高维的情况已经无法可视化了。 自适应学习率举一个简单的思想:随着次数的增加,通过一些因子来减少学习率
学习率不能是一个值通用所有特征,不同的参数需要不同的学习率 Adagrad算法定义及公式形式定义: 每个参数的学习率都把它除上之前微分的均方根。 普通的梯度下降为: w t + 1 ← w t ? η t g t w^{t+1}←w^t?η^tg^t wt+1←wt?ηtgt η t = η t t + 1 \eta^t=\frac{\eta^t}{\sqrt {t+1}} ηt=t+1?ηt? w?是一个参数 Adagrad公式为: w t + 1 ← w t ? η t σ t g t w^{t+1}←w^t-\frac{\eta^t}{\sigma^t}g^t wt+1←wt?σtηt?gt g t = ? L ( θ t ) ? w g^t=\frac{?L(\theta^t)}{?w} gt=?w?L(θt)? Adagrad更新过程:
最终Adagrad形式: w t + 1 ← w t ? η ∑ i = 0 t ( g i ) 2 g t w^{t+1}←w^t-\frac{\eta}{\sqrt {\displaystyle \sum^{t}_{i = 0}{(g^i)^2}}}g^t wt+1←wt?i=0∑t?(gi)2?η?gt Adagrad的矛盾
答:这是因为随着我们更新次数的增大,我们是希望我们的学习率越来越慢。因为我们认为在学习率的最初阶段,我们是距离损失函数最优解很远的,随着更新的次数的增多,我们认为越来越接近最优解,于是学习速率也随之变慢。 图中红色方框作为整体的学习率,随着迭代次数的增加,最正常的情况就是我们逐渐接近最优解,就算梯度很大,也应该降低学习率去逐步逼近最优解 随机梯度下降法随机梯度下降法更快,损失函数不需要处理训练集所有的数据,选取一个例子? x n x^n xn L = ( y n ? ( b + ∑ w i x i n ) ) 2 L=(y^n?(b+∑w_i{x_i}^n))^2 L=(yn?(b+∑wi?xi?n))2 $θ^i 此时不需要像之前那样对所有的数据进行处理,只需要计算某一个例子的损失函数Ln,就可以赶紧update 梯度。例如: 特征放缩比如有个函数: y = b + w 1 ? x 1 ? + w 2 ? x 2 y=b+w_ 1?x_ 1?+w_ 2?x_ 2 y=b+w1??x1??+w2??x2? 两个输入的分布的范围很不一样(两个特征的数量范围差距很大)建议把他们的范围缩放,使得不同输入的范围是一样的。
如何放缩上图每一列都是一个例子,里面都有一组特征。 对每一个维度?i(绿色框)都计算平均数,记做? m i m_i mi?;还要计算标准差,记做? σ i \sigma _i σi?。 然后用第?r?个例子中的第?i?个输入,减掉平均数 ? m i ?m_i ?mi?,然后除以标准差? σ i \sigma _i σi?,得到的结果是所有的维数都是?0,所有的方差都是?1 特征缩放的几种方法:(1)最大最小值归一化(min-max normalization): 将数值范围缩放到?[0,?1]?区间里 (2)均值归一化(mean normalization) :将数值范围缩放到?[-1,?1]?区间里,且数据的均值变为0 (3)标准化 /?z值归一化(standardization /z-score?normalization ) :将数值缩放到0附近,且数据的分布变为均值为0,标准差为1的标准正态分布(先减去均值来对特征进行?中心化 mean centering?处理,再除以标准差进行缩放) (4)最大绝对值归一化(max abs?normalization ) : 也就是将数值变为单位长度(scaling to unit length) ,将数值范围缩放到?[-1,?1]?区间里 (5)稳键标准化(robust standardization):先减去中位数,再除以四分位间距(interquartile range),因为不涉及极值,因此在数据里有异常值的情况下表现比较稳健 些机器学习模型必须进行特征缩放?通过梯度下降法求解的模型需要进行特征缩放,这包括线性回归(Linear Regression)、逻辑回归(Logistic Regression)、感知机(Perceptron)、支持向量机(SVM)、神经网络(Neural Network)等模型。此外,近邻法(KNN),K均值聚类(K-Means)等需要根据数据间的距离来划分数据的算法也需要进行特征缩放。主成分分析(PCA),线性判别分析(LDA)等需要计算特征的方差的算法也会受到特征缩放的影响。 决策树(Decision Tree),随机森林(Random Forest)等基于树的分类模型不需要进行特征缩放,因为特征缩放不会改变样本在特征上的信息增益。 行特征缩放的注意事项:需要先把数据拆分成训练集与验证集,在训练集上计算出需要的数值(如均值和标准值),对训练集数据做标准化/归一化处理(不要在整个数据集上做标准化/归一化处理,因为这样会将验证集的信息带入到训练集中,这是一个非常容易犯的错误),然后再用之前计算出的数据(如均值和标准值)对验证集数据做相同的标准化/归一化处理。 梯度下降的限制
参考链接:
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/22 11:15:01- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |