0x00 机器学习基础
机器学习可分为三类
- 监督学习
- 无监督学习
- 强化学习
三种学习类别的关键点
- 监督学习需要人为设置参数,设置好标签,然后将数据集分配到不同标签。
- 无监督学习同样需要设定参数,对无标签的数据集进行分组。
- 强化学习需要人为设置初始参数,然后通过数据的反馈,不断修改参数,使得函数出现最优解,也即我们认为最完美的策略。
机器学习的原理
- 向系统提供数据(训练数据或者学习数据) 并通过数据自动确定系统的参数。
机器学习常见算法有很多,比如
- 逻辑回归
- 支持向量机
- 决策树
- 随机森林
- 神经网络
但是是否真的需要按照概率论->线性代数->高等数学->机器学习->深度学习->神经网络这个顺序去学呢?
- 不一定,因为等你学完,可能会发现自己真正需要的一些东西学的不够清楚,反倒是学了一堆只是看过一次之后就不会用到的知识点。
0x01 强化学习背景
强化学习刚出现时非常火爆,但是之后却逐渐变冷。主要原因在于强化学习不能很好的解决状态缩减表示,智能体主要存在着状态和动作,比如状态可看作人类在地球的某个位置,动作可看作人类走路,如果我们很清楚人类的位置和动作其实就能预测出人的下一个状态和动作,但是事实上智能体需要通过枚举的方式将所有可能的状态汇集到一张表中,而就我们这个例子来说,一个人的下一个状态实在是太多了,比如现在我位于北京,我下一步飞到上海,飞到南京,没有谁清楚我到底飞哪里。为什么AI不能突破到强人工智能?我认为主要还是算力不够,没办法把智能体的所有状态都列举出来。现今因为深度学习可以对大量的数据进行降维处理,使得数据集保有了特征的同时缩小了体积,使得同样的算力情况下,强化学习能够收集到智能体更多的状态用来获得最优解,所以出现了新的概念,叫做深度强化学习,它是将深度学习与强化学习结合的强化学习的加强版,这种学习可以完成对于人类来说非常困难的任务。
0x02 迷宫的建立
import numpy as np
import matplotlib.pyplot as plt
fig=plt.figure(figsize=(5,5))
ax=plt.gca()
# 画墙壁
plt.plot([1,1],[0,1],color='red',linewidth=3)
plt.plot([1,2],[2,2],color='red',linewidth=2)
plt.plot([2,2],[2,1],color='red',linewidth=2)
plt.plot([2,3],[1,1],color='red',linewidth=2)
# 画状态
plt.text(0.5,2.5,'S0',size=14,ha='center')
plt.text(1.5,2.5,'S1',size=14,ha='center')
plt.text(2.5,2.5,'S2',size=14,ha='center')
plt.text(0.5,1.5,'S3',size=14,ha='center')
plt.text(1.5,1.5,'S4',size=14,ha='center')
plt.text(2.5,1.5,'S5',size=14,ha='center')
plt.text(0.5,0.5,'S6',size=14,ha='center')
plt.text(1.5,0.5,'S7',size=14,ha='center')
plt.text(2.5,0.5,'S8',size=14,ha='center')
plt.text(0.5,2.5,'S0',size=14,ha='center')
plt.text(0.5,2.3,'START',ha='center')
plt.text(2.5,0.3,'END',ha='center')
# 设置画图范围
ax.set_xlim(0,3)
ax.set_ylim(0,3)
plt.tick_params(axis='both',which='both',bottom='off',top='off',labelbottom='off',right='off',left='off',labelleft='off')
# 当前位置S0用绿色圆圈
line,=ax.plot([0.5],[2.5],marker="o",color='g',markersize=60)
# 显示图
plt.show()
运行结果
0x03 策略迭代算法
对于我们人类而言,一眼就可以看出怎么从START走到END S0->S3->S4->S7-S8
那么对于机器而言,我们正常套路是通过编程直接写好路线解决这种问题,不过这样的程序依赖的主要是我们自己的想法了,现在我们要做的是强化学习,是让机器自己根据数据学习怎么走路线。
基本概念
- 强化学习中定义智能体的行为方式的规则称为策略 policy 策略 使用 Πθ(s,a)来表示 ,意思是在状态s下采取动作a的概率遵循由参数θ决定的策略Π。
在这里,状态指的是智能体在迷宫的位置,动作指的是向上、右、下、左的四种移动方式。
Π可用各种方式表达,有时是函数的形式。
这里可通过表格的方式,行表示状态,列表示动作,对应的值表示概率来清楚的表示智能体下一步运动的概率。
若Π是函数,则θ是函数中的参数,在这里表格中,θ表示一个值,用来转换在s状态下采取a的概率。
定义初始值
theta_0=np.array([[np.nan,1,1,np.nan], #S0
[np.nan,1,np.nan,1], #S1
[np.nan,np.nan,1,1], #S2
[1,1,1,np.nan], #S3
[np.nan,np.nan,1,1], #S4
[1,np.nan,np.nan,np.nan], #S5
[1,np.nan,np.nan,np.nan], #S6
[1,1,np.nan,np.nan], #S7
]) # S8位目标 不需要策略
运行结果asd