什么是机器学习
最近在入门人工智能,发现了一大堆的名词,和大家分享一下我是怎么理解机器学习的。
机器学习的概念
在百度上有定义,这里我说一下我自己的定义哈。机器学习就是让机器可以猜到你心里想的那个数字。
我们想一下,什么是学习? 不就是从一开始的瞎猜到合理的推测吗?
我们玩一个猜数字的游戏,这个游戏规定,数字大小在0~100之间,但是我个人的习惯就是,这个数在50附近,比如48,49,50,51,52,一直都是这五个值中的一个。
假设我和你玩了一百次,每次你猜完,我告诉你猜对了都是这五个数字中的一个,如果继续玩,你是不是就会在这五个数字中去问我对不对? 所以,你现在就学会了怎么较为准确的猜出我心里想的数字。
以上过程我们就可以说是学习,即从过去的经验中得到下一次类似事件可能发生的结果。
机器怎么学习?
其实,在我看来,机器学习就是统计学和计算机的组合,可能这个说法比机器学习这个名词更接近真相。
现在我们来做一个线性拟合(这个机器学习的一个经典应用),假设现在有五个点,这五个点
- p1:(1,5)
- p2:(2,6)
- p3:(3,7)
- p4:(4.8)
- p5:(5,9)
上面这五个点,我们要是画一条线,就可以直接看出来,是y=x+4的直线上的五个点,对吧。
在高中,我们学过最小二乘法去计算斜率和截距的值,但现在我们不用这种公式来解这个系数,而是用猜的方式来学习怎么得到比较准确的系数。
我们按照以下过程看看能不能得到这样的系数:
- 我们先假设斜率是3,截距是20
- 我们导入y=3x+20,带入x为1到5,发现所有的y值都大于给出的点
- 根据2得出的结论,我认为截距值大了,我就-5,然后 y=3x+15
- 将新的公式带入x,看y值,发现还是所有的值都大于给出的点
- 继续做上面的调整,直到我们发现有这条线从这些点中间穿过,即部分点在线上面,部分在下面
- 微调斜率,让所有点都在得出的线上面或者下面
- 微调截距,让新的线穿过这些点
- 重复上面这个过程,直到我们计算的这些点和线的均方差达到一个阈值即可,比如说小于了10,我们就认为可以了
当然,我这里的推到并不是很严谨。但大体上说明白了怎么去猜测出一个合适的系数,让一条直线穿过这些点的时候,总误差比较小。
而且,我们可以看出,如果给出的点越多,这个猜测结果可信度越高。
如果能把上面的逻辑通过代码变成算法,我们就获得了一个机器学习的算法。
当然还可以优化,比如我们开始的时候不是随意的给出一个随机的斜率和随机的截距,而是让这条直线直接穿过其中的一个点,可以加快迭代次数等。
看了上面的例子是不是忽然觉得,这不就很像一个人在没有专业的数学功底的情况下去解决一个数学问题的推理方式吗?虽然不会用某个公式来直接解决,但是可以凭借直觉去调整参数。让机器像人一样思考!!!
只是线性函数,如何满足复杂情况?
在很多时候,要得到的曲线不是线性的,复杂问题往往需要一个曲线,或者说一段一段的分段函数。
这一个部分,我推荐大家去B站看一下这个视频,这个大哥我觉得将得很清楚,主要是我觉得我讲不了这么清楚。
点击这里
通过上面这个视频,你就会发现,只需要把线性函数和一个激活函数组合,然后再进行叠加,就可以得到一个你想要的任何形状的曲线。这个曲线通过参数不停优化,你甚至可以用一条曲线画一只猫猫,不是吗?
好了,祝大家学有所成,天天开心!