线性变换

视频说明,来自 https://www.youtube.com/watch?v=kYB8IZa5AuE

线性变换:Linear Transformation ,transformation代表一种函数,但这个单词表示需要考虑一种移动(将一个向量移动到另一个位置,或者将一个点移动到另一个点)

变换

坐标轴表示的变换

而Linear代表,一条直线变换完还是直线,原点不变。

线性变换的时候,可以将原来的向量坐标分解,然后再对每个轴进行处理。

线性变换坐标变换

矩阵方式表示坐标变换:

矩阵表示坐标变换

强化学习

一个模拟环境:https://gym.openai.com/

一套教程:https://mofanpy.com/tutorials/machine-learning/reinforcement-learning/intro-q-learning/

来自 https://www.youtube.com/watch?v=2xATEwcRpy8https://www.youtube.com/watch?v=JgvyzIkgxF0

强化学习示意图

Agent会进行Environment的探索,agent可以感知environment的状态state(s),agent采取的行动action(a)会影响Environment,而这个行动会有一个reward(r)。

另一个图

https://zhuanlan.zhihu.com/p/27860483

主动对环境进行试探,并根据试探后,环境反馈回来的结果进行评价、总结,以改进和调整自身的行为,然后环境会根据新的行为作出新的反馈,持续调整的学习过程。

环境(Environment):环境会接收Agent执行的一系列的动作(Action),并且对这一系列的动作的好坏进行评价,并转换成一种可量化的(标量信号)Reward反馈给Agent,而不会告诉Agent应该如何去学习动作。Agent只能靠自己的历史(History)经历去学习。同时,环境还像Agent提供它所处的状态(State)信息。环境有完全可观测(Fully Observable)和部分可观测(Partial Observable)两种情况。

https://zhuanlan.zhihu.com/p/30315707

reward:

  • 我们定义了“奖励”,这是一个标量,他代表了一个反馈的信号,代表时刻的的action的表现如何
  • 我们的目标是得到累计的reward的最大值
  • reward hypothesis:reinforcement learning 在reward方面都是基于这个假设的,也就是说,我们认为我们的目标都能够被描述为reward的累计的最大值
  • 如果我们的任务是基于时间的目标问题,比如我们希望让任务在最小时间完成,这样,我们可以再每次执行完一个action之后,设定一个”-1”的反馈,这样的话,这样我们的优化目标就能够最小化任务执行的时间

Goal

  • 对于任何的任务,我们的统一目标是:得到reward的累计的最大值
  • 有时候我们的agent需要提前做思考,不能只看到当前的reward,要在当前状态就考虑如何使得我的未来得到的reward最大化
  • 基于上面的特点,这就意味着,我们可能需要放弃眼前的利益以获得累计的更大的奖励。
  • 比如说,我们在直升机游戏中,会选择停下来补充燃料,然后继续飞行,短期看降低了飞行的距离,但是长期看,他能够在坠前飞的更久

History 和 State 的关系

  • history是一个action、observation、reward的序列:$H_{t}=A_{1}, O_{1}, R_{1}, \ldots, A_{t}, O_{t}, R_{t}$
  • history能够决定action接下来采取什么行动;实际上,agent做的就是从history到action的映射
  • 对于环境而言,history和产生的action交给environment,从而得到对应的observation和reward
  • state是history的一个总结,用来决定下一步的action是什么,实际上,他是一个关于history的函数,我们可以这样表示:$S_{t}=f\left(H_{t}\right), A_{t}=h\left(S_{t}\right)$
  • State相对于hisory而言最大的好处在于他的信息量很少,实际上,我们也不需要得到所有的history来得到下一步的action(在之后的马尔科夫状态中会提到原因)。

SVD的几何理解

来自 https://www.youtube.com/watch?v=DG7YTlGnCEo ,Singular Value Decomposition (SVD) and Image Compression

几何变换

我们有些时候需要做一个变换,比如:

变换示例

在这种情况下,我们需要进行旋转、水平和竖直方向的拉伸和压缩,并且再次进行旋转。

而矩阵可以表示一个线性变换,比如:

矩阵表示线性变换的例子

有一些特殊的矩阵:

  • 旋转:
    • 旋转矩阵
  • 拉伸压缩:
    • 拉伸压缩矩阵

并且可以进行分解:

  • 分解

转换为SVD

转换为矩阵形式的示意图

降维

0.44很小,所以可以考虑把它去掉(变为0)

比较不重要的部分

变成0之后

因此可以降维:

降维

而且可以将矩阵分解之后压缩存储:

分解后从16个数缩减到8个数

而其实矩阵可以用SVD的方式分解出来:

分解的示意图

分解的示意图2

所以可以考虑把后面的比较小的去掉。

前n项计算出来的结果

四个不同的大小矩阵计算

如果不是一个方阵,其实也可以做:

非方阵的情况

图像压缩

基于之前的SVD技术,可以进行图像压缩。

先对原始图像进行分解,只保留一行一列的情况下:

图像压缩保留一行一列

而之后已经基本上等于0了:

到后面就基本上等于0了

如果保留前3项,就已经和原图很像了;如果保留前4项,就已经一样了。

压缩

推荐系统矩阵分解的直观理解

内容来自 How does Netflix recommend movies? Matrix Factorization ( https://www.youtube.com/watch?v=ZspR5PZemcs ),讲得非常清晰易懂

代码在 https://github.com/yanneta/pytorch-tutorials/blob/master/collaborative-filtering-nn.ipynb

我们可以假设每个人和每个电影有内在的一些feature,假如考虑两个feature,Comedy和Action:

  • 每个电影包含的两部分的量和每个人对两部分的喜爱与否是下表所示:
    • 分解量的直观理解
    • 这里√可以写成1,×可以写成0,所以预期评分就是两部分的内积
  • 最后可以算出一个评分表,就代表每个人对于电影的喜爱程度:
    • 算出的矩阵

左边的两个矩阵相对较小,而右边的矩阵相对较大。这样做也可以起到节省存储空间的作用。

矩阵表示

也可以用图的方式来观察,相当于是有中间的feature部分:

图形式

分解的时候可以用梯度下降的方式,先给一个随机值再更新,使用平方求和的方式算误差。

Error function

Colab使用

挂载磁盘:

挂载

解压和压缩:

解压和压缩

如果有很多图片的数据集,应该直接将这些图片的压缩包用上面的方式解压到挂载的磁盘上,如果直接从drive读取所有图片是很慢的!

也可以使用git clone或者wget命令