100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 吴恩达机器学习machine learning 笔记补充(第345678 11周)

吴恩达机器学习machine learning 笔记补充(第345678 11周)

时间:2020-06-11 06:10:21

相关推荐

吴恩达机器学习machine learning 笔记补充(第345678 11周)

因为吴恩达的机器学习已经有很详尽又贴心的归纳了,但为了方便查询,这里写写:大纲、要注意的点 和 偶然的想法,第1、2周和第3周前面不补了。

传送门:

第3周

第4周

第5周

第6周

第7周 ( 写了没保存,FML )

第8周

第9周 (前半截写了居然没保存,不写了,要看就看别人的吧)

第10周(路上看的,然后没啥记的,看ppt吧)

第11周

第3周

Classification and Representation – Classification

To attempt classification, one method is to use linear regression and map all predictions greater than 0.5 as a 1 and all less than 0.5 as a 0. However, this method doesn’t work well because classification is not actually a linear function.

对二元分类(0/1)不用linear模型的原因是通常数据不会是线性(可分)的。

Logistic Regression Model – Simplified Cost Function and Gradient Descent

Logistic Function 的 J (cost function)和linear的 J 不同:

主要的原因是 h(z) 不是线性的,所以他的导数不是个凸函数(这什么逻辑???反正他就不是个凸函数):

这样直接来可能会陷入局部最优解,所以要改一下 J 的形式,这个J对theta求导之后,化到最后发现形式跟linear也是一样的:

当然只是式子表面相同,因为 J 和 h 函数都和linear不同。

Logistic Regression Model – Advanced Optimization

有些自带的函数,很方便:

忍不住记一下。

Multiclass Classification – One-vs-all

这里讲到多元分类问题,1 vs all 的方法:

y从单纯的 0/1 变成 0~n 类,然后h函数也变了

右上角的0 ~ n对应y的0 ~ n。看了一下不知道怎么写代码。写写画画一下,其实就是theta不应该是vector了,应该是矩阵形式,例:

┌ θ 0 0 θ_0^0 θ00​ θ 1 0 θ_1^0 θ10​ θ 2 0 θ_2^0 θ20​ ┐

└ θ 0 1 θ_0^1 θ01​ θ 1 1 θ_1^1 θ11​ θ 2 1 θ_2^1 θ21​ ┘

这样的 θ θ θ 是 2x3 形式的,上标数字是对应h的上标,表示对应的y的h函数(概率);下标数字对应的是第几个参数: θ 0 x 0 + θ 1 x 1 + θ 2 x 2 θ_0x_0+θ_1x_1+θ_2x_2 θ0​x0​+θ1​x1​+θ2​x2​。这样,利用矩阵的性质,其实也是 h θ = t h e t a ∗ X h_θ = theta*X hθ​=theta∗X(X设为列向量:3x1),不过这里的 h θ h_θ hθ​是有多个(0~n)而已。

统计答案就是比较哪个h代入x后最大,就选那个h代表的y。

Solving The Problem of Overfitting – Regularized Linear Regression

这里 J θ J_θ Jθ​ 有一个负号。。。其实是前面的式子提一个负号出来(视频中的习题做错了):

然后正则化是在后面加上这个品红框框住的东西。

第4周

Neural Networks – Model Representation I

“theta” parameters are sometimes called “weights”.

θ参数也叫"权重",这里叫的是"参数"

Neural Networks – Model Representation II

注意这里,θ10(2) 、θ11(2)、θ12(2)、θ13(2),下标为1x,上标为(2),是指θ参数是第(2)层的θ,然后是第(2)+1=(3)层的第1号输出,输入是第(2)层的第x号输入,这里上标(2)写得有点像(1),然后明显发现1x是先讲输出再讲输入的,不太习惯,觉得先讲输入再讲输出更好。不过θ的dimension(长乘宽)是 1乘max(x) ,1是输出层的节点个数,max(x)就是输入层的节点个数,正好对应了,这就是先写输出再写输入的原因吧。

Application – Examples and Intuitions II

这里想要让神经网络弄出式子:x1 XNOR x2 ,XNOR就是NOT XOR,XOR的取反,也就是相同的是1

即 1和1 是1,0和0是1,因此就是 ( x1 AND x2 ) OR ( (NOT x1) AND (NOT x2) )

下面第一行三个图就包含上面的式子的操作,其中a1是AND函数的表示,a2是NOT AND函数的表示, h θ h_θ hθ​就是OR函数的表示,然后第二行的左图,神经网络就开始用这三个权重进行组合,分别用对应的颜色标出,神奇 : )

第5周

Cost Function

In the regularization part, after the square brackets, we must account for multiple theta matrices. The number of columns in our current theta matrix is equal to the number of nodes in our current layer (including the bias unit). The number of rows in our current theta matrix is equal to the number of nodes in the next layer (excluding the bias unit). As before with logistic regression, we square every term.

θab 是 a x b 维的,a表示下一层的节点个数,b表示当前层的节点个数( 都不包含 bias unit,就那个1 )。

Backpropagation Algorithm

bp 中 δ δ δ 的推导看零基础入门深度学习

注意 δ 1 δ_1 δ1​ 是不用 bp 更新的

没看懂这个 △ △ △ (delta) 怎么更新的

最后觉得还是要学深一点,去看了一下别人的推导过程:

Backpropagation 算法的推导与直观图解

引用一句:

BP 算法的目的在于为优化函数(比如梯度下降、其它的高级优化方法)提供梯度值,即使用 BP 算法计算代价函数(cost function)对每个参数的偏导值,其数学形式为:∂∂Θ(l)ijJ(Θ),并最终得到的值存放在矩阵 Δ(l) 中。

第6周

本节中的d是指degree of polynomial,多项式的项数(出于θ0)

这周讲了怎么用一些方法去确定λ和d。

这一节的这个问题不是很懂,看了一下别人的笔记:

感觉是因为是最后训练的挑出来的θ,所以这个θ是针对它匹配的d,所以会优于 Jtest 下的情况(??)。有点乱,反正就θ和d有关联,然后Jcv 与 d 的联系比 Jtest 大吧,所以就好一点。

习题,这里疯狂错,最后一个smaller set 应该是针对 high variance,“用更少特征”的意思。

总结一下几个问题:

怎么划分出 Ecv 和 Etrain:

就是说:(设多项式项最高次为m)

在 training set 测试集中找到对应多项式项d=1~m的最优的 θ 1 到 θ m θ_1 到 θ_m θ1​到θm​,然后用 cv 集的数据找到对于这m个θ中最优的θ,即记为 θ d θ^d θd,d就是多项式中错误最小的那个多项式(的指数),然后把这个θ放到test集中测试:

为什么要用划分出 Ecv 和 Etest,主要是为了查出算法不好的地方在哪里,有了这两个Error,就可以分出是high bais(高偏差(欠拟合))还是high variance(高方差(过拟合)):

根据d(多项式最高项指数):

根据N(样本数):

Error Analysis

本节讲错误分析:

首先是要弄一个简单的算法(即使效果不是很好也没有关系),然后话 learning curves,来判断是需要更多的数据还是更多的特征等等等等,然后开始Error analysis:就是自己人工挑出分类错误的数据的共同点,然后看看是否要加入新特征或者调整特征,找出自己算法的优缺点,指导自己想出办法去完善自己的算法。这样的话,付出一点努力,方向就会很明确,而不是没有方向地瞎优化。

比如说对于分类垃圾邮箱分错了的

( i ) 中会看分错了的邮件的类型

( ii ) 中会看分错了的邮件有共同特征

当然比如对于是否要提取一些单词的词干,最好的方法就是比较用了提取和不用提取的错误率,就能知道好不好了。

最后,这些错误率的验证是要在cv集上验证的,而不是在test集上验证。

总结下,就是一开始设计的算法要简单,用各种方法验出改进的地方后,在 cv set 上试试各种新的改进和想法。而不是一开始就设计很复杂的算法,这样修改起来很烦,方向可能会偏。

如果有一个样本,y=1为一个人患癌症,可以知道y=1的几率很小,那么我们对于自己算法的正确率是否提升就不太清楚(称为Skewed Classes,偏斜类),因为y很小,所以如果做出来的算法是1%错误,而真实情况是只有0.5%的人y=1的话,那么如果我们全部判断y=0,得出来的正确率就是100%。这样,说明当我们做了些修改,使得正确率提升了,我们不能知道我们做的修改是不是像直接把结果y赋为0这么糟糕:

这个时候,针对偏斜类的数据,就需要用到 precision (查准率)和 Recall(召回率),如果两个率都很高,就是个好算法。因为如果把y都设为0,这里的recall就是0,得出这个算法是不好的。

precision:对于说有癌症的真的有癌症

recall:确实有癌症的被正确诊断为有癌症

不过precision和recall成反比,不能两个都高,如果希望人们少被误诊,少受癌症之苦,就要precision高些,如果想要得癌症的人少被漏诊,就要recall高些(不懂得看回上图两个率的解释和定义)。不过要想衡量的话,可以用F(或者说 F 1 F_1 F1​) = 2 P R P + R \frac{2PR}{P+R} P+R2PR​(等等方法),使得两个率都尽可能高。

最后,当数据很大时,满足下面两条定理,Jtrain 会很小,而Jtrain有约等于Jtest,所以Jtest也会很小,即很大的数据对算法的训练有用。

第7周

写了没保存

第8周

也没有总结的,记一记8。

*K-Means Algorithm

约定无监督学习中的 K - Means 算法,x(i)是n维的,剔除掉 x 0 = 1 x_0 = 1 x0​=1 的约定。

μ 是 n维vector ,然后听说是这么写 R^n 就是打竖的意思。

PCA 部分(Principal Component Analysis)

Motivation I: Data Compression

数据压缩:如果有些特征高度关联,就可以把他们进行压缩。

比如两个特征,厘米和英尺,其实是一个东西,然后它俩可以线性表示(虽然有一点点点点误差),所以用一根线就能表现出两个特征,或者说两个特征可以只有一个特征表示, R 2 R^2 R2 就能降为 R 1 R^1 R1

三维就是变成二维平面:

Principal Component Analysis Algorithm

PCA的过程。这里没有给出证明,不过知道重点是高维压缩到低维也行。

u 是指压缩后的向量,z 是指 x 对于压缩后的向量的值。(这里x是指大矩阵)。

第一步是要先 mean normalization 一下,然后进行 feature scaling 。

有个svd函数方便我们弄出 u 向量,右边蓝色那个 X 矩阵是按一组一行排列的,所以实际运用是蓝色框那个式子。然后如果 K - means 用 PCA 的话,要记得也是没有 x0 这个约定。

这个sigma就是协方差,注意要跟求和符号区分,然后协方差的定义可以看看线性代数的书。

Reconstruction from Compressed Representation

reconstruction:原始数据的重构,从 z 找回 x,注意同样也是近似的值:

Choosing the Number of Principal Components

如何选择 PCA 中的 k ?这里有个公式。如果这个公式小于 0.01,我们可以说 “ 我选择了参数k,使得99%的差异性得以保留 ”。“通常你可以大幅地降低数据的维度 却还能保留大部分的差异性 因为大部分现实中的数据 许多特征变量 都是高度相关的”。这里需要优化的是 1 m Σ i = 1 m ∣ ∣ x ( i ) − x a p p r o x ( i ) ) ∣ ∣ 2 \frac{1}{m}\Sigma^m_{i=1}||x^{(i)}-x_{approx}^{(i))}||^2 m1​Σi=1m​∣∣x(i)−xapprox(i))​∣∣2

然后有更简便的方法:

左边是K从1开始暴力,每次跑 PCA ,直到符合那个不等式。右边是每次跑 svd,然后用里面的 S 矩阵,满足右下角的不等式即可。这样的话一个是跑 PCA ,一个是 svd ,显然后者更快更推荐。

Advice for Applying PCA

PCA 的3个好处:

不过不建议用来搞overfitting,这个应该是用正则化来做的。因为正则化有确定的 y,比起无监督的 PCA 不会丢失数据。

PCA 虽然很好,但不要一起手就用 PCA,要先用原始数据,如果实在不好,需要 PCA 来加速啥的,才用 PCA。理由如上。

注意:上图有 PCA流程:

先把 train 的数据 PCA 一下,然后再把 cv 或者 test set 中的数据根据 u 来转成 z,再在上面跑得出来的 hypothesis 。

第11周

Getting Lots of Data and Artificial Data

有时候不能搞到这么多数据,我们可以人工做一些数据出来:

第一种方法是自己从零开始创造新数据,

第二种方法是把较小的训练集通过一些转化,来变成较大的训练集。比如字母是数据,可以把不同字体中的字母弄下来,贴到不同的背景上,不同字体可以在很多网站上免费得到。

或者是让字母变下形:

值得注意的是,如果是增加什么纯粹的随机的无意义的noise进去,是对训练没有积极意义的。

识别语音方面也可以把原声加入一点杂音来训练:

在决定要扩充数据之前,一定要先思考一下这两个问题:

扩充数据之前,要保证你的分类器是**低偏差(low bias)高方差(high variance)**的(绘制学习曲线来看),如果是高偏差的就要加入合适的特征。确保你的分类器经过大量的数据训练之后,确实能够得到提升,而不是花时间收集了之后,发现效果不是很好。要时常问一下花多少时间能弄出10倍的数据。我们可以估计一下,如果10s完成一个label,然后一天,一周每人能得出多少个数据。或者是请人来做。通常会发现其实花的时间不是很多。

Ceiling Analysis: What Part of the Pipeline to Work on Next

(天花板分析,其实我觉得应该叫上限分析更好,pipeline就是那个工作流程)

**如果你要做一个开发(机器学习啥的),最宝贵的就是时间,要规划好自己的时间。**不要花费了几周几个月的时间,才发现对系统的表现没有太大帮助。

可以用:ceiling analysis,下面有三个部分都做完了,现在我们要选择把多少人手分配到这三个部分中来进行优化。初始的时候正确率是72%,如果我们把 Text detection 这一项正确率变为 100% 的话,我们可以看到整体的正确率是89%,然后保持不变,继续把 Character segmentation 的正确率变为 100% ,我们可以看到整体正确率变为 90% ,以此类推。

因此,我们可以看到应该优先改进 Text detection 这一环节,而对于 Character Segmenation ,这一环节可能作用不大,不需要花太多人手在上面来改进它。

还有一个人脸识别系统,大概有以下工作:

经过 ceiling analysis ,我们发现那个 remove background 只提升了 0.1%,说明这部分应该不需要重视的,但是两个工程师花了18个月在上面,优化这一项,还发表了文章,不过最后发现对整体系统提升不大,如果18个月前做好ceiling analysis的话,就不会走错方向,花费宝贵的时间了,这个代价有点太大了,看来选好方向真的很重要,想起高中老师那句 “方向错了,速度越快,失败越快”。

最后总结:不要太相信自己的直觉,“觉得”要把时间花在哪,跳过哪。还是要把问题分成多个模块(pipeline),然后做好上限分析(ceiling analysis),就像梯度下降一样,把精力花在效果最好的地方上,这样才能节省宝贵的时间,提高办事效率。

终章:Summary and Thank You !!!

总结下学过的东西,要不仅仅只是认识他们,还要灵活运用,来建立强大的机器学习系统。

最后 Ng 说“你可以自信地认为,你已经成为了机器学习方面的专家了”(我有点虚233),应该用这些工具让人们生活变得更好。

Thank you too Ng ~ 完结撒花

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。