网易云课堂地址:https://study.163.com/course/courseMain.htm?courseId=1004570029
字幕组干的还算不错!
Chapter 1:绪论
支持向量机->支持无限维度的特征
无监督学习之鸡尾酒算法?
“鸡尾酒会问题”(cocktailparty problem)是在计算机语音识别领域的一个问题,当前语音识别技术已经可以以较高精度识别一个人所讲的话,但是当说话的人数为两人或者多人时,语音识别率就会极大的降低,这一难题被称为鸡尾酒会问题。
该问题描述的是给定混合信号,如何分离出鸡尾酒会中同时说话的每个人的独立信号。当有N个信号源时,通常假设观察信号也有N个(例如N个麦克风或者录音机)。该假设意味着混合矩阵是个方阵,即J = D,其中D是输入数据的维数,J是系统模型的维数。
使用Octave学会算法原型,再使用其他编程语言
Octave是一种编程语言,旨在解决线性和非线性的数值计算问题。Octave为GNU项目下的开源软件,早期版本为命令行交互方式,4.0.0版本发布基于QT编写的GUI交互界面。Octave语法与Matlab语法非常接近,可以很容易的将matlab程序移植到Octave。同时与C++,QT等接口较Matlab更加方便。
Chapter 2:单变量线性回归
Q:cost function的类型?
1.均方误差(线性模型中最常使用)
J(θ0,θ1)=1/2m∑i=1m(y^(i)−y(i))2=1/2m∑i=1m(hθ(x(i))−y(i))2
2.交叉熵 (逻辑回归中最常用,在神经网络中也会用到)
reference https://www.cnblogs.com/Belter/p/6653773.html
补充:各种loss function的比较https://www.jianshu.com/p/ac26866e81bc
对于两个参数的cost function,使用高线图(or等高图像)来展示曲面
:= 表示赋值(eg: a := 1)
梯度下降,需要同步更新多个参数
学习速率α太小,梯度下降可能非常慢
学习速率α太大,可能会无法收敛,甚至会发散
如果你的参数已经处于局部最优点,参数将不再自动改变(导数为零)
梯度下降本质上是一个贪心算法,容易陷入局部最优。
Q:如何避免掉进局部最优点?(与神经网络结合,有待研究!)
一些解决方案?
Batch Gradient Descent(批梯度下降):全览整个训练集,一次迭代训练所有样本
mini-batch?
https://blog.csdn.net/eric_e/article/details/80371022
Chapter 5:多变量线性回归
多元梯度下降法
技巧一:特征缩放,把特征x压缩在[-1,1]之间,从而加速梯度下降,特征之间不要差别太大,
Ng推荐范围:[-3,3]
技巧二:均值归一化(x1=(x1-u1)/s1) u1:average s1:(max-min)
如何判断是否已经达到收敛标准:
1.看cost function的函数图像(横轴:迭代次数)(推荐)
2.设置合适的阈值,当cost function小于该阈值,则认为已经收敛(不推荐)
cost function递增的原因之一:学习速率α过大
多试几个α值,可以3为倍数(大一些的话,可以是10)
正规方程法(不需要特征缩放)
根据矩阵运算,直接得到所有的Θ
缺点:若n较大(n>1w),计算较慢
若遇到矩阵不可逆,可以删除多余的特征,或者考虑正则化方法
Chapter 7:logistic regression(实际上是分类模型)
不推荐将线性模型用于分类问题
decision boundary(决策边界)可以是很复杂的高阶多项式,如圆形的边界
logistic regression用于寻找决策边界
把cost function设置为凸函数,从而可以避免达到局部最优解
使用统计学中的极大似然法得到cost function?
logistic regression和线性回归不同之处在于假设的函数,前者是sigmoid函数,参数更新是相同的
高级优化算法:Conugate gradient/BFGS/L-BFGS
1.不需要手动选择学习速率α
2.速度比梯度下降算法更快
多类别分类问题:训练出多个分类器,将x输入到每个分类器中,选择最可信的那个结果(概率最大)
Chapter 8:正则化
解决过拟合的两种办法
1.减少特征的数量
2.正则化(保留所有特征)
核心思想:将参数都尽量弄小一点,使得模型尽可能简单一点,从而尽量避免过拟合
向cost function中加入正则化项(惩罚项),使得每一个参数都尽可能小
任何方法都可能导致过拟合或者欠拟合,需要合适地使用
Chapter 9:神经网络学习
前向传播,向量化的实现方法
多元分类问题
Chapter 10:神经网络参数的反向传播算法
梯度检测:Check that [ gradApprox nearly= DVec ],手动检测反向传播的导数是否正确
在使用梯度检测确认导数没有问题之后,应当关闭梯度检测再训练,因为其速度很慢
参数初始化:
1.全置为0不可取
2.初始化为随机数[-e,e] e:init_epsilon
Chapter 11:应用机器学习的建议
随机将数据分为训练集和数据集(三七开)
模型选择问题
更好的分法:训练集6 交叉验证集2 测试集2
交叉验证集用于选择最合适的模型,而测试集则用于测评模型的性能(计算误差)
高偏差(bias): 欠拟合,d过小
J(train)很大,J(cv)和J(test)差不多
solution: 1.Try getting additional features
2.Try adding polynomial features ( x1^2,x2^2,x1x2,etc)
3.Try decreasing λ
高方差(variance):过拟合,d过大
J(train)很小,J(cv)远大于J(test)
注:J(cv)是一个V字形曲线,我们需要尽可能接近其最低点,从而获得最好的模型
solution: 1.Get more training examples
2.Try smaller set of features
3.Try increasing λ
正则参数λ对模型的影响:λ过大,欠拟合;过小,过拟合
如何选择正确的λ? :尝试一系列的λ,以2为倍数
画图( J() - λ )有助于选择模型和判断模型性能
绘制学习曲线:error - m(size of training set):判断模型是否出现了高偏差和高方差
如果大型神经网络出现了过拟合现象,通常使用正则化的方式来修改
可以使用交叉测试集来选择隐含层的数量,一般只有一层
Chapter 12:机器学习系统设计
误差分析:通过仔细研究总是分类错误的一些数据(在交叉数据集上),看看是否可以找到更好的特征,从而改进模型
先实现一个简单粗暴、效果不一定好的学习算法,再决定下一步做什么
斜偏类:一个类的数据量比另外一个类多很多
查准率和召回率,也可以评估算法性能
拥有高的查准率和召回率的学习算法是一个好算法
查准率和召回率之间的抉择:根据实际需求来确定是追求查准率还是召回率(eg:预测癌症)
如何根据查准率和召回率来选取算法: 1.F1(score) = 2PR/(P+R) (调和平均数)
Good Model + sufficient data = Great!
Good Question:人类专家看了x之后,可以预测出y吗?