2019-04-24 23:13:57 qq_33414271 阅读数 144
  • 机器学习入门30天实战

    购买课程后,可扫码进入学习群,获取唐宇迪老师答疑 系列课程包含Python机器学习库,机器学习经典算法原理推导,基于真实数据集案例实战3大模块。从入门开始进行机器学习原理推导,以通俗易懂为基础形象解读晦涩难懂的机器学习算法工作原理,案例实战中使用Python工具库从数据预处理开始一步步完成整个建模工作!具体内容涉及Python必备机器学习库、线性回归算法原理推导、Python实现逻辑回归与梯度下降、案例实战,信用卡欺诈检测、决策树与集成算法、支持向量机原理推导、SVM实例与贝叶斯算法、机器学习常规套路与Xgboost算法、神经网络。

    7710 人正在学习 去看看 唐宇迪

​斯坦福大学有很多关于人工智能领域的著名公开课,包括CS229N机器学习、CS231N机器视觉、CS224N自然语言处理。

国外的一个牛人学习了CS229并整理了极简的速查表,非常方便学习回顾,下面是速查表的详情。

一、监督学习

在这里插入图片描述
二、无监督学习

在这里插入图片描述

三、深度学习
在这里插入图片描述

四、一些技巧

在这里插入图片描述

五、概率统计

在这里插入图片描述

六、线性代数

在这里插入图片描述

完整下载上述6张速查表,请关注公众号“慢慢学算法”,并回复“cs229”获取!

2019-04-29 15:08:30 qq_44943626 阅读数 61
  • 机器学习入门30天实战

    购买课程后,可扫码进入学习群,获取唐宇迪老师答疑 系列课程包含Python机器学习库,机器学习经典算法原理推导,基于真实数据集案例实战3大模块。从入门开始进行机器学习原理推导,以通俗易懂为基础形象解读晦涩难懂的机器学习算法工作原理,案例实战中使用Python工具库从数据预处理开始一步步完成整个建模工作!具体内容涉及Python必备机器学习库、线性回归算法原理推导、Python实现逻辑回归与梯度下降、案例实战,信用卡欺诈检测、决策树与集成算法、支持向量机原理推导、SVM实例与贝叶斯算法、机器学习常规套路与Xgboost算法、神经网络。

    7710 人正在学习 去看看 唐宇迪
               

(all is based on the stanford open course cs229.Lecture 11.)

regularization(正规化)防止过拟合:保留所有的参数

贝叶斯学习方法:增加先验概率,常用为高斯分布N(0,λ),使算法更倾向于选择更小的参数

体现在最大似然估计上就是增加惩罚项目,||Θ||^2

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

在线学习:online learning ,与batch learning相差较大,具体可见coursera里面第八节的内容,讲得比较清楚

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

接下来讲的是如果算法不起作用,如何分析改进一个算法

首先是bias和variance的分析,这在笔记六里讲得很清楚了

cs229和coursera上不同的是是增加了叫做“fix  optimization algorithm “和”fix optimization objective”的分析

采用的方法有:

1)多做几次迭代,看效果是否有改进fix optimization algorithm

2)尝试其他算法进行convergefix optimization algorithm

3)改变一些常量参数fix optimization objective

4)尝试使用其他机器学习算法fix optimization algorithm

而对于特定问题,我们必须自己去构造分析方法,andrew ng就举了一个关于自动驾驶直升飞机的例子

能正确对算法进行分析,才能避免无谓地浪费时间

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

接下来是针对一个系统的分析,Error Analysis

一个系统常常由多个机器学习算法组成的,所以如果系统工作不顺利,必须要分析出是哪个部分出问题了

Error Analysis就是对每一个部件,依次用基准值(ground-truth)替换每个部件的输出

看看整体系统的效果改变是否较大,如果较大就说明系统精度的瓶颈就在刚刚替换了的这个部件这里

这在coursera上的课程上也有说明,但我好像没有作笔记

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

再次就是ablative analysis(销蚀分析)

和上面不同的的是销蚀分析是在最后结果很高的情况下,remove一个组件的输出,来看每个部件对最后结果的影响


视频截图,就看个轮廓吧,99.9%是整个系统的精度,依次remove左边的一个组件的基准值

看看哪个组建值得优化,值得注意的是“依次”

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

最后一点就是the danger of over-theorizing



(视频截图),也就是说,不要太过理论化,否则你的系统会变得越来越复杂,以至于无法实现

这就和有一个寓言一样:为了钉一幅画,没有锤子,去找锤子。做锤子要木头,就去伐木

伐木要伐木机,就去找伐木机,伐木机没油………


//////////////////////////////////////////////////////////////////////////////////////////////////////////////



           
2018-10-11 15:33:30 li528405176 阅读数 437
  • 机器学习入门30天实战

    购买课程后,可扫码进入学习群,获取唐宇迪老师答疑 系列课程包含Python机器学习库,机器学习经典算法原理推导,基于真实数据集案例实战3大模块。从入门开始进行机器学习原理推导,以通俗易懂为基础形象解读晦涩难懂的机器学习算法工作原理,案例实战中使用Python工具库从数据预处理开始一步步完成整个建模工作!具体内容涉及Python必备机器学习库、线性回归算法原理推导、Python实现逻辑回归与梯度下降、案例实战,信用卡欺诈检测、决策树与集成算法、支持向量机原理推导、SVM实例与贝叶斯算法、机器学习常规套路与Xgboost算法、神经网络。

    7710 人正在学习 去看看 唐宇迪

目录

监督学习(supervised learning)

机器学习理论

无监督学习

增强学习


机器学习:使计算机模拟或实现人类的学习行为,以获取新的知识或技能。并重新组织已有的知识结构使之不断改善自身的性能。

监督学习(supervised learning)

问题引入

根据给定的一组采集数据,预测房价。

 我们可以看到,问题只有单个输入变量,即单个特征。因变量为价格,可以取任意值,即连续。因此我们可以利用线性回归将给定数据拟合成一条曲线(直线或抛物线等),来解决该回归问题。然后我们就可以在这条曲线上去预测其他已知面积房屋的价格了。

 

对于另一类问题,例如根据医院的肿瘤诊断数据,预测肿瘤性质。

易知,因变量肿瘤性质不是恶性就是良性,即离散。对于这种分类问题,我们可以使用逻辑回归来处理。

上例仍然只有单个输入变量。但多数情况下,需要考虑多个输入变量和特征,如下例:

输入变量包括患者年龄和肿瘤大小,输出变量为肿瘤性质。

 

机器学习理论

探究为什么机器学习算法是有效的。

 

无监督学习

利用聚类算法,将无标签的数据进行分类。

 

无监督学习还可以用来解决有趣的鸡尾酒问题,在混合在一起的声音中对某一个声音进行提取。除此之外,文本处理、理解功能分级和机械数据等也可以使用这类无监督学习算法来解决。

 

增强学习

增强学习可以使电脑自主学习,其关键概念在于回报函数(惩罚函数)。计算机在一段时间内做出一系列决策,每次决策后通过回报函数来判断该决策是好是坏,然后改善自己的决策模型。

 

 

2019-04-21 11:11:25 qq_44943626 阅读数 24
  • 机器学习入门30天实战

    购买课程后,可扫码进入学习群,获取唐宇迪老师答疑 系列课程包含Python机器学习库,机器学习经典算法原理推导,基于真实数据集案例实战3大模块。从入门开始进行机器学习原理推导,以通俗易懂为基础形象解读晦涩难懂的机器学习算法工作原理,案例实战中使用Python工具库从数据预处理开始一步步完成整个建模工作!具体内容涉及Python必备机器学习库、线性回归算法原理推导、Python实现逻辑回归与梯度下降、案例实战,信用卡欺诈检测、决策树与集成算法、支持向量机原理推导、SVM实例与贝叶斯算法、机器学习常规套路与Xgboost算法、神经网络。

    7710 人正在学习 去看看 唐宇迪
               

==========================================================================

上周生病再加上课余的一些琐事,这边的进度就慢下来了,本篇笔记基于 斯坦福大学公开课cs229 的 lecture16,lecture 17

==========================================================================

零:一些认识

涉及到机器人的操控的时候,很多事情可能并不是supervised和unsupervised learning能够解决的,比如说andrew ng之前一直提到的自动控制直升飞机,另一个例子就是下棋,有可能很久之前的一步棋就埋下了后面失败的伏笔,而机器很难去判断一步棋的好坏。这就是增强学习需要解决的问题。

注:这里的Value价值即是很多书上写的Q值,貌似也有点差别,在于Q可能是Q(s,a)的,是给定状态和一个动作之后的V值,但差异不大。


一:马尔科夫决策过程 (Markov decision processes)

马尔科夫决策是一个五元组,用一个机器人走地图的例子来说明它们各自的作用

S:状态集:就是所有可能出现的状态,在机器人走地图的例子中就是所有机器人可能出现的位置

A:action,也就是所有可能的行动。机器人走地图的例子假设机器人只能朝四个方向走,那么A就是{N,S,E,W}表示四个方向

P:就是机器人在S状态时采取a行动的概率

γ:叫做discount factor,是一个0到1之间的数,这个数决定了动作先后对于结果的影响度,在棋盘上的例子来说就是影响了这一步

  棋对于最结果的影响有多大可能说起来比较模糊,通过后面的说明可能会讲得比较清楚。

R:是一个reward function,也就是可能是一个,也可能是,对应来说就是地图上的权值

         ===============================================================================

有了这样一个决策过程,那么机器人在地图上活动的过程也可以表现为如下的形式:


也就是从初始位置开始,选择一个action到达另一个状态,直到到达终状态,因此我们这样来定义这个过程的价值:


可以看出越早的决定对价值影响越大,其后则依次因为γ而衰减

其实可以看出,给出一个MDP之后,因为各个元都是定值,所以存在一个最优的策略(ploicy),策略即是对于每个状态给出一个action,最优

策略就是在这样的策略下从任意一个初始状态能够以最大的价值到达终状态。策略用π表示。用


表示在策略π下以s为初始状态所能取得的价值,而通过Bellman equation,上式又等于:


注意这是一个递归的过程,在知道s的价值函数之前必去知道所有的s'的价值函数。(价值函数指的是Vπ())

而我们定义最优的策略为π*,最优的价值函数为V*,可以发现这两个东西互为因果,都能互相转化。


二.价值迭代和策略迭代(Value iteration & policy iteration)

   ///////////////价值迭代VI:////////////////////

   这个过程其实比较简单,因为我们知道R的值,所以通过不断更新V,最后V就是converge到V*,再通过V*就可以得到最优策略π*,通

   过V*就可以得到最优策略π*其实就是看所有action中哪个action最后的value值最大即可,此处是通过bellman equation,可以通过解bellman equation得到

   所有的V的值,这里有一个动归的方法,注意马尔科夫决策过程中的P其实是指客观存在的概率,比如机器人转弯可能没法精确到一个方向,而不是指在s状态

   机器人选择a操作   的概率,刚才没说清楚

   在此说明,也就是说:

   是一个客观的统计量。


    /////////////策略迭代PI/////////////////////

  

   这次就是通过每次最优化π来使π converge到π*,V到V*。但因为每次都要计算π的value值,所以这种算法并不常用

   这两个算法的区别就是过程的区别,但我感觉本质上差别不大。(andrew说有不一样,至少看起来不一样……这个待查)


三.连续状态的MDP

之前我们的状态都是离散的,如果状态是连续的,下面将用一个例子来予以说明,这个例子就是inverted pendulum问题

也就是一个铁轨小车上有一个长杆,要用计算机来让它保持平衡(其实就是我们平时玩杆子,放在手上让它一直保持竖直状态)

这个问题需要的状态有:都是real的值

x(在铁轨上的位置)

theta(杆的角度)

x’(铁轨上的速度)

thata'(角速度)


  /////////////////离散化///////////////////////////

  也就是把连续的值分成多个区间,这是很自然的一个想法,比如一个二维的连续区间可以分成如下的离散值:


但是这样做的效果并不好,因为用一个离散的去表示连续空间毕竟是有限的离散值。

离散值不好的另一个原因是因为curse of dimension(维度诅咒),因为连续值离散值后会有多个离散值,这样如果维度很大就会造成有非常多状态

从而使需要更多计算,这是随着dimension以指数增长的

//////////////////////simulator方法///////////////////////////////

也就是说假设我们有一个simulator,输入一个状态s和一个操作a可以输出下一个状态,并且下一个状态是服从MDP中的概率Psa的分布,即:


这样我们就把状态变成连续的了,但是如何得到这样一个simulator呢?

①:根据客观事实

比如说上面的inverted pendulum问题,action就是作用在小车上的水平力,根据物理上的知识,完全可以解出这个加速度对状态的影响

也就是算出该力对于小车的水平加速度和杆的角加速度,再去一个比较小的时间间隔,就可以得到S(t+1)了

②:学习一个simulator

这个部分,首先你可以自己尝试控制小车,得到一系列的数据,假设力是线性的或者非线性的,将S(t+1)看作关于S(t)和a(t)的一个函数

得到这些数据之后,你可以通过一个supervised learning来得到这个函数,其实就是得到了simulator了。

比如我们假设这是一个线性的函数:


在inverted pendulum问题中,A就是一个4*4的矩阵,B就是一个4维向量,再加上一点噪音,就变成了:其中噪音服从


我们的任务就是要学习到A和B

(这里只是假设线性的,更具体的,如果我们假设是非线性的,比如说加一个feature是速度和角速度的乘积,或者平方,或者其他,上式还可以写作:)


这样就是非线性的了,我们的任务就是得到A和B,用一个supervised learning分别拟合每个参数就可以了


四.连续状态中得Value(Q)函数

这里介绍了一个fitted value(Q) iteration的算法

在之前我们的value iteration算法中,我们有:


这里使用了期望的定义而转化。fitted value(Q) iteration算法的主要思想就是用一个参数去逼近右边的这个式子

也就是说:令

其中一些基于s的参数,我们需要去得到系数的值,先给出算法步骤再一步步解释吧:

算法步骤其实很简单,最主要的其实就是他的思想:

在对于action的那个循环里,我们尝试得到这个action所对应的,记作q(a)

这里的q(a)都是对应第i个样例的情况

然后i=1……m的那个循环是得到是最优的action对应的Value值,记作y(i),然后用y(i)拿去做supervised learning,大概就是这样一个思路


至于reward函数就比较简单了,比如说在inverted pendulum问题中,杆子比较直立就是给高reward,这个可以很直观地从状态得到衡量奖励的方法

在有了之上的东西之后,我们就可以去算我们的policy了:

五.确定性的模型

上面讲的连续状态的算法其实是针对一个非确定性的模型,即一个动作可能到达多个状态,有P在影响到达哪个状态

如果在一个确定性模型中,其实是一个简化的问题,得到的样例简化了,计算也简化了

也就是说一个对于一个状态和一个动作,只能到达另一个状态,而不是多个,特例就不细讲了


           
2019-04-28 20:56:18 qq_44943626 阅读数 76
  • 机器学习入门30天实战

    购买课程后,可扫码进入学习群,获取唐宇迪老师答疑 系列课程包含Python机器学习库,机器学习经典算法原理推导,基于真实数据集案例实战3大模块。从入门开始进行机器学习原理推导,以通俗易懂为基础形象解读晦涩难懂的机器学习算法工作原理,案例实战中使用Python工具库从数据预处理开始一步步完成整个建模工作!具体内容涉及Python必备机器学习库、线性回归算法原理推导、Python实现逻辑回归与梯度下降、案例实战,信用卡欺诈检测、决策树与集成算法、支持向量机原理推导、SVM实例与贝叶斯算法、机器学习常规套路与Xgboost算法、神经网络。

    7710 人正在学习 去看看 唐宇迪
               

(all is based on the stanford's open-course CS229 lecture 15)

因为对ICA理解得不是很深刻

在网上东搜西搜搜到一个牛人的bloghttp://www.cnblogs.com/jerrylead/

他也写了cs229的学习笔记系列,和我的一比较顿时我就自惭形秽了,不过既然都差不多快写完了,我也就继续坚持着吧

毕竟我的本意是给自己留个笔记,不过我也把他写的笔记download下来加深理解,学习了

==========================================================================

零.知识准备

概率密度函数和累积分布函数(cumulative distribution function, 缩写为 cdf)---这是概率论的基础知识了吧

其中概率密度函数的变换

也就是说如果我们有一个概率密度函数,如果有,怎样求

公式如下:其中|W|时矩阵W的行列式,W时A的逆矩阵

一.引例

    这个问题的引例其实就是在cs229的第一节课上讲到的鸡尾酒问题

    即两个人在酒会上同时讲话,而在房间不同位置的两个麦克风记录了他们的声音,要把两个声音分离出来

    andrew ng当时给了一个svd的公式,但好像和lecture 15的关系不大

    其实刚进大一的时候我就很无知地想过用函数去拟合声音,但是后来觉得声音是混杂的,所以也没继续想,想在想来真是===无知者无畏啊大笑

    这样的问题不光出现在声音上,也出现在脑电波识别(meg)和图像处理(cv)等领域

二.思路

如果我们拿到一个混杂的声音,其实很难识别出其独立的部分(鸡尾酒问题中的两个独立部分就是两个人分别说话的声音)

而鸡尾酒问题中要两个麦克风的原因也在于此,就像人的双耳效应一样,两个麦克风记录的声音,每个独立部分的大小是不一样的

ica就是通过其中的差异来分离出其独立部分

我们知道矩阵其实是一种变换,而声音的重叠其实就是一种变换(考虑声音的在计算机中的储存方式,是以时间为轴的图像,图像上的高度对应声音的数据),

        所以假设我们有两个源声音s1,s2,声音的叠加就是关于s1和s2的线性变换,用一个矩阵A表示这种变换,在鸡尾酒问题中,A是2*2的

所以,也就是我们麦克风记录到的两个混杂的声音

        ica就是通过找到A的逆矩阵从而还原源声音s的

同时,这种变换对于高斯分布的数据是无效的,因为变换在旋转时会造成歧义(貌似是这样,再看看)

三.算法

      机器学习的东西很难不和概率扯上关系,所以照旧,我们的最大似然函数就是


        而通过上面的讲解,

可以推导出:

在此我们需要给出ps的定义,ps是数据的概率密度函数,而我们需要一个非高斯分布的概率密度函数,因此我们需要一个非高斯的概率分布函数

其实可以任意选择,只要符合概率分布函数的性质,这里我们选择了sigmoid函数作为概率分布函数,即:


        这样log似然函数就变成了

其中m是训练样例数,n是参数数,对应带鸡尾酒问题中,m是离散的声音点的个数,n是麦克风(人)的个数

然后再通最大化似然函数我们就可以得到随机梯度上升算法的迭代式了(注意这里如果用batch gradient ascent没什么效果)


四.算法的不确定性(ambiguities)

1.源数据的顺序

ica可以分理出不同的独立成分,但是无法指出哪一个独立成分对应一个源数据,这是很好理解的

因为变换矩阵A可能会是一个permutation matrix,也就是说矩阵行于行之间交换顺序这不会影响矩阵的各种性质

幸运的是,这对大多数应用没有影响

 2.还原数据的scaling

因为scaling是一维的线性变换,也就是说乘除一个常数,所以因为,我们只知道x,所以不能得到具体的A和s的scaling

这在声音问题上的影响就是声音的大小,也是可以忽略的

五.代码

学习要用代码来加强,找了一些文章,发现基本上都是用fastICA的版本,是一个类似于神经网络的方法,略高端

  最后给出一个基于最大似然的梯度上升算法的代码以及实验数据(matlab)

[n,m] = size(MixedS);chunk = 10;alpha = 1.5;W = eye(n);sss=MixedS;for iter=1:40 disp([num2str(iter)]); MixedS= MixedS(:,randperm(m)); for i=1:floor(m/chunk)  Xc = MixedS(:,(i-1)*chunk+1:i*chunk);  dW = (1 - 2./(1+exp(-W*Xc)))*Xc'+ chunk*inv(W');  W = W + alpha*dW; endend;
      实验效果(实验用的音频来自网上一个fastICA示范的数据,我就直接拿过来用了)


可以发现较好地还原了源数据,同时也体现了无法得到具体的scaling这个不确定性,音频强度明显减弱了,但是这对实验效果没什么影响

==========================================================================

           
没有更多推荐了,返回首页