机器学习学习记录

免责声明

我是猪鼻,我是猪鼻,本文旨在记录一只又懒又笨的小老鼠学习机器学习的过程,无专业指导,无专业参考资料,也指不定什么时候就会放弃。

写在前面

自我认证一个特点,“单线程”…,我很早就想学点新东西,但我的cpu一直被阻塞…原因就是找工作,不得不说真难呀,一开始没重视,简历差,八股也差,想去的公司又少,流程还慢,到四月份了还没一个定论,一浮躁起来什么其他事都不想干(放松除外),所以一直搁置,直到最近感觉学八股快到头了,再继续学收益不高,索性学点新东西试试。

自问自答讲几个心历路程。

为什么是机器学习,不是语言进阶或是专攻几个组件亦或者架构设计方面的呢?

两个原因

  1. 兴趣使然,虽然我在这几个方面都属于初学者,但我隐约可以预见我对于后者那些方向的学习路程,更多的是剖析和吸取经验,再做拓展,很难创新。而机器学习给我的感觉更为特殊,它更像是搭建,按照人类的思维轨迹,创造出新的生物思维一般。(这里说的大了,就当我好奇心重就行了)
  2. 收益,chatgpt的横空出世,引发了席卷全球的风暴,有人形容它为第四次工业革命的开端,我不觉得夸张。有句话是这么说的,如果纺织机能完全替代纺织工人,那只有去做制造纺织机的人才能保住工作。从几个例子里我已经看到了初阶工程师被替代的可能,所以其实我没有选择。(也说大了,机器学习入门和chatgpt的差距我都懒得比喻,但收益确实是需要考虑的点)

为什么不读研,或者类似碰壁更少的路?

也是两个原因

  1. 没有条件
    a) 考不上,花半年到一年的时间让我去学一些不感兴趣的东西,纠结那些细枝末节又收益极低的问题,埋了我得了。(不吐槽太多,我对于这部分想法一直很偏激)
    b) 没钱,除了学习,我同样热爱生活,有钱才能实现我的梦想。
  2. 优先级问题,我并没有把这件事当成我的头等大事,路要踏踏实实的走,如果把目标划分成 “能做好的”,"想做好的"这两个维度,显然我不一定甚至很难说做的好。

暂时就这些,如果想到更多的再补充吧。

Let’s Go

Day1 2023.04.08

我有两个学习习惯,比较好描述,也同样打算这么开始。

  1. 实践-理论-实践,从成果出发,映照着一些概念性的东西入门,再做一些逻辑推演,学习一些理论,再回到实际产品,结合理论来重新分析。举个栗子,比如说计算机网络,这个比较庞大的内容,我很喜欢用抢红包这个事件来出发,理解网络上各个节点的概念的时候,我会想象从手机点击按钮开始,中间的信息传递经过了哪些部分,最终怎么到服务器,又怎么回来的,诸如此类的想法。一些通俗易懂的博客或者科普视频都是这么做的,非常好理解。


    所以这次同样打算这么开始,选择的栗子就是大学里简单搞过的象棋人工智障。我得提一下这玩意儿的背景,它的一手开发者是何俊毅(我发小),他在大二上学期的时候有一门课主题好像是游戏+ai的结合,于是他大作业就搞了这个,算法自己写的,素材网上找的。我大二下(记不清了,应该这个时候)也选了个机器学习的选修课,当时不是奔着学来的,就因为这门课的老师是最松的老师哈哈,我忙着学别的嘛,就选这门课来凑学分了。最后大作业就直接白嫖何俊毅的人工智障了,但因为真的太智障了(除了会走啥也不会,将军摆脸上都不吃),我就和jiedai(大学好友)修了下算法,勉强还行。
  2. 总分总,或者叫递归式学习?从最宽泛的概念开始,系统了解之后,再分细节展开,最后总结式的记忆。没啥好说的。

今天主要做的事情是思考,下午打了两个小时球,除了投篮的那一下以外,其他时候都在对上面所述的象棋人工智障在做联想。记录一下都想了些啥,下面会把这个人工智障称为"阿尔法鼠"(大学同学的戏称)

我们试着理解这么几个概念

  1. 局面
    象棋的初始状态,所有棋子按照规则摆放在它应该摆放的位置,在移动数步之后,摆放位置会发生一定的变化,我们称某一时刻,所有棋子的摆放位置为局面
  2. 动作
    每一个棋子都可以按照规则来进行移动,比如象走田,马走日

很简单地可以发现,局面和动作之间是关联的,每一个局面经过一次动作会到达另一个局面。
于是阿尔法鼠一代就做好了,用代码的方式让它记录当前的局面,并遍历所有棋子,获得所有可以进行的动作,并随机选择一个,它就可以在毡板上任人宰割了。

想象一下假如自己是一个象棋初学者,你下的第一盘棋是什么样的。按照说明书上的,把每个棋子正确置放之后,看着自己面前的棋子十分茫然,不知道该动哪一个,选好了之后还要对照说明书,看看可以怎么动。跟阿尔法鼠一代是不是有点像。

这么笨可不行,再优化下试试,让我们来尝试两个新概念

  1. 局势
    通过规则我们可以知道,只要自己的老大被干掉就输了,反之干掉对面老大就赢了,我们称越接近胜利的局面 局势越好,反之局势越差。按照经验(切记不要先入为主,经验只是帮助我们理解的工具)必杀局面(一步或者几步就能将死),棋子数量差距,棋子布局,按照人类的思考方式,这些都能成为评估局势的手段。
  2. 策略
    在所有可以选择的动作中,我们尝试不再按照相同的概率去选择,某些动作被执行的概率更高,反之部分概率则会降低,影响动作执行的概率我们称之为策略。

同样可以简单的发现,局势会影响策略,但需要注意的是,局势可以理解成策略的子集,我们完全可以忽略局势这个概念,只要告诉阿尔法鼠一定的策略,他就会更聪明,只不过在象棋中,局势这个概念更容易被理解和分析,所以单拎出来讲了而已。

想象一下被告知有这两种策略的阿尔法鼠,一、有帅吃帅,无帅吃车,车帅都无,马炮也行。二、无马无炮,起士保帅,士已到位,再起个象。

ok,阿尔法鼠在毡板上蹦跶了两下,双炮上来就换掉对面的双马,然后就开始原地防守。
这俩策略有点猪鼻怎么办,有没有简单一点办法让它能思考更多东西。

引入在博弈游戏中常出现的局势这个概念,我们先按照经验制定一版简单的,按照棋子的棋力来描述局面,将帅最重要,吃掉就赢,定一个一万分,车也还行,一百分,马灵活一点,80分,炮吃子的时候藏得深,60分…
于是简单的局势评估就这么定好了,阿尔法鼠在每次进行动作选择的时候,会判断动作结束之后的局势,局势越好的动作,越可能被它选择到。
这次它蹦跶地更厉害了,会点进攻又会点防守,但为什么怎么蹦跶,都还在毡板上呢?原因自然是局势的判断或者策略不够好,稍微懂点象棋的朋友应该知道,按照棋力去评估局势其实是很好的手段了,不至于让它这么蠢,所以问题还是出在策略上,它只看的到一步之后的局势。

如果它只能分析一步,会连换子都不知道,用自己的车横冲直撞,然后被别人轻松的吃掉。那我们可以优化一下,能不能想两步或者更多?先试试看两步,两步怎么看?阿尔法鼠不敢违反规则,它只能动一步,下一步得对面来走。在苦恼之际,伟大的科学家蒙特卡洛出现了,小鼠啊,让我来告诉你该怎么想,假设你走这步,再去遍历阿尔法猪(阿尔法鼠的对手)的动作,看看它能到达的最好局势,选最终导致这个最好局势最差的那一步就行啦。
阿尔法鼠恍然大悟,这个策略不错,它终于逃离了毡板,但还是在洗手池里被抓了回来。
反思一番之后发现,聪明的阿尔法鼠举一反三,它把蒙特卡洛的话扩展了一番,决定反复横跳三次,双层饼不行就三层饼,三层不行就四层!

可怜的阿尔法鼠还没被宰就因为大脑过载死亡了。

为什么会出现这样的结果呢,不难理解,第一次选择的动作假如有一百个,那么两层想象就有100*100 一万种,三层一百万,四层一亿,虽然阿尔法鼠的脑子很好用但还是禁不起这样压榨。

不过没事,虽然我们暂时没能帮助阿尔法鼠崛起,但可以比较清楚地理解策略和局势这两个概念了。

day1就先到这吧,我想的肯定要更多一点,但是写是写不完了,明天再写。

思考两个问题

  1. 如何让阿尔法鼠想简单点?我们在下棋的时候是如何思考的?
  2. 在上文中,提到了很多"经验"这个词,这个是记忆在我们的脑袋里的,阿尔法鼠有没有办法积累经验,如何积累?