Machine Learning Chinese NLP :::: Non-linear Hypotheses - Chad Salinas ::: Data Scientist
Life and times of Chad Salinas
Chad Salinas, golf caddy, data scientist, chad rPubs, recovering chess addict, daddy caddy
1250
post-template-default,single,single-post,postid-1250,single-format-standard,qode-listing-1.0.1,qode-social-login-1.0,qode-news-1.0,qode-quick-links-1.0,qode-restaurant-1.0,ajax_fade,page_not_loaded,,qode-title-hidden,qode_grid_1300,qode-theme-ver-12.0.1,qode-theme-bridge,bridge,wpb-js-composer js-comp-ver-5.4.2,vc_responsive

Machine Learning Chinese NLP :::: Non-linear Hypotheses

Non-linear Hypotheses

在这节课和接下来的课程中
我将给大家介绍
一种叫“神经网络”(Neural Network)
的机器学习算法

我们将首先讨论
神经网络的表层结构
在后续课程中
再来具体讨论的学习算法
神经网络实际上是一个
相对古老的算法
并且后来沉寂了一段时间
不过到了现在
它又成为许多机器学习问题
的首选技术

不过我们为什么还需要这个学习算法?
我们已经有线性回归和逻辑回归算法了
为什么还要研究神经网络?

为了阐述研究
神经网络算法的目的
我们首先来看几个
机器学习问题作为例子
这几个问题的解决
都依赖于研究复杂的非线性分类器

考虑这个监督学习分类的问题
我们已经有了对应的训练集
如果利用逻辑回归算法
来解决这个问题
首先需要构造
一个包含很多非线性项的
逻辑回归函数
这里g仍是s型函数 (即f(x)=1/(1+e^-x) )
我们能让函数
包含很多像这样的多项式项
事实上 当多项式项数足够多时
那么可能
你能够得到一个

分开正样本和负样本的分界线
当只有两项时
比如 x1 x2
这种方法确实能得到不错的结果
因为你可以
把x1和x2的所有组合
都包含到多项式中
但是对于许多
复杂的机器学习问题
涉及的项往往多于两项

我们之前已经讨论过
房价预测的问题
假设现在要处理的是

关于住房的分类问题
而不是一个回归问题
假设你对一栋房子的多方面特点
都有所了解
你想预测
房子在未来半年内
能被卖出去的概率
这是一个分类问题

我们可以想出
很多特征
对于不同的房子有可能
就有上百个特征

对于这类问题
如果要包含
所有的二次项
即使只包含
二项式或多项式的计算
最终的多项式也可能有很多项
比如x1^2

x1x2 x1x3 x1x4

直到x1x100
还有x2^2 x2x3

等等很多项
因此
即使只考虑二阶项
也就是说
两个项的乘积
x1乘以x1
等等类似于此的项
那么 在n=100的情况下

最终也有5000个二次项

而且渐渐地
随着特征个数n的增加
二次项的个数大约以n^2的量级增长
其中
n是原始项的个数
即我们之前说过的x1到x100这些项
事实上二次项的个数大约是(n^2)/2

因此要包含所有的
二次项是很困难的
所以这可能
不是一个好的做法
而且由于项数过多
最后的结果很有可能是过拟合的
此外
在处理这么多项时

也存在运算量过大的问题

当然 你也可以试试
只包含上边这些二次项的子集
例如 我们只考虑
x1^2 x2^2
x3^2直到
x100^2 这些项
这样就可以将二次项的数量大幅度减少
减少到只有100个二次项
但是由于
忽略了太多相关项
在处理类似左上角的数据时
不可能得到理想的结果
实际上
如果只考虑x1的平方
到x100的平方
这一百个二次项
那么你可能会
拟合出一些特别的假设
比如可能拟合出
一个椭圆状的曲线

但是肯定不能拟合出
像左上角这个数据集的分界线

所以5000个二次项看起来已经很多了
而现在假设
包括三次项
或者三阶项
例如x1 x2 x3
x1^2
x2 x10
x11 x17等等
类似的三次项有很多很多
事实上
三次项的个数是以n^3的量级增加
当n=100时
可以计算出来
最后能得到
大概17000个三次项
所以
当初始特征个数n增大时
这些高阶多项式项数
将以几何级数递增
特征空间也随之急剧膨胀
当特征个数n很大时
如果找出附加项
来建立一些分类器
这并不是一个好做法

对于许多实际的机器学习问题 特征个数n是很大的
举个例子

关于计算机视觉中的一个问题

假设你想要
使用机器学习算法
来训练一个分类器
使它检测一个图像
来判断图像是否为一辆汽车

很多人可能会好奇 这对计算机视觉来说有什么难的
当我们自己看这幅图像时
里面有什么是一目了然的事情
你肯定会很奇怪
为什么学习算法竟可能会不知道
图像是什么

为了解答这个疑问
我们取出这幅图片中的一小部分
将其放大
比如图中
这个红色方框内的部分
结果表明
当人眼看到一辆汽车时 计算机实际上看到的却是这个
一个数据矩阵
或像这种格网
它们表示了像素强度值
告诉我们图像中每个像素的亮度值
因此 对于计算机视觉来说问题就变成了
根据这个像素点亮度矩阵
来告诉我们
这些数值代表一个汽车门把手

具体而言
当用机器学习算法构造
一个汽车识别器时
我们要想出
一个带标签的样本集
其中一些样本
是各类汽车
另一部分样本
是其他任何东西
将这个样本集输入给学习算法
以训练出一个分类器
训练完毕后
我们输入一幅新的图片
让分类器判定 “这是什么东西?”

理想情况下 分类器能识别出这是一辆汽车

为了理解引入
非线性分类器的必要性
我们从学习算法的训练样本中
挑出一些汽车图片
和一些非汽车图片

让我们从其中
每幅图片中挑出一组像素点
这是像素点1的位置
这是像素点2的位置
在坐标系中标出这幅汽车的位置
在某一点上
车的位置取决于
像素点1和像素点2的亮度

让我们用同样的方法标出其他图片中汽车的位置
然后我们再举一个
关于汽车的不同的例子
观察这两个相同的像素位置

这幅图片中
像素1有一个像素强度
像素2也有一个不同的像素强度
所以在这幅图中它们两个处于不同的位置
我们继续画上两个非汽车样本
这个不是汽车
这个也不是汽车
然后我们继续
在坐标系中画上更多的新样本
用”+”表示汽车图片
用“-”表示非汽车图片
我们将发现
汽车样本和非汽车样本
分布在坐标系中的不同区域
因此
我们现在需要一个
非线性分类器
来尽量分开这两类样本

这个分类问题中特征空间的维数是多少?
假设我们用50*50像素的图片
我们的图片已经很小了
长宽只各有50个像素
但这依然是2500个像素点

因此
我们的特征向量的元素数量
N=2500
特征向量X
包含了所有像素点的亮度值
这是像素点1的亮度
这是像素点2的亮度
如此类推
直到最后一个
像素点的亮度
对于典型的计算机图片表示方法
如果存储的是每个像素点的灰度值 (色彩的强烈程度)
那么每个元素的值
应该在0到255之间
因此 这个问题中n=2500
但是
这只是使用灰度图片的情况
如果我们用的是RGB彩色图像
每个像素点包含红、绿、蓝三个子像素
那么n=7500

因此 如果我们非要
通过包含所有的二次项
来解决这个非线性问题
那么
这就是式子中的所有条件
xi*xj
连同开始的2500像素
总共大约有300万个
这数字大得有点离谱了
对于每个样本来说
要发现并表示
所有这300万个项
这计算成本太高了

因此 只是简单的增加
二次项或者三次项
之类的逻辑回归算法
并不是一个解决
复杂非线性问题的好办法
因为当n很大时
将会产生非常多的特征项
在接下来的视频课程中
我将为大家讲解神经网络
它在解决复杂的非线性分类问题上
被证明是
是一种好得多的算法
即使你输入特征空间
或输入的特征维数n很大也能轻松搞定
在后面的课程中
我将给大家展示
一些有趣的视频
视频中讲述了神经网络在历史上的重要应用

我也希望
这些我们即将看到的视频
能给你的学习过程带来一些乐趣

No Comments

Sorry, the comment form is closed at this time.