机器学习 Machine Learning
机器学习是为计算机提供数据,而非指令
计算机利用数据识别特征
监督学习 Supervised Learning
在监督学习中,计算机基于成对的输入输出训练集,模拟一个映射的函数
分类 Classification
生成一个函数,将输入映射到离散输出

这里举了个根据气压、湿度对天气进行分类的例子
通过颜色来区分天气情况,并根据当天的气压、湿度,在坐标轴上标出对应的点
最近邻分类 Nearest-Neighbor Classification
这里的白点代表着需要被分类的日子,我们不难想到,可以尝试通过找和它最近的点的颜色,把这个颜色赋给他
k-邻近分类 k-nearest-neighbors
这里指的是,选择 k 个最近的点,把这 k 个中某一数量最多的特征赋给白点
感知器学习 Perception Learning

这种方法中,我们尝试创建一个决策边界,即图中的这条黄线,来划分不同的特征
缺点:数据很杂乱,找到一条完美划分的线,不得不妥协
线性方程
这里我们引入线性方程来辅助计算
- Rain w₀ + w₁x₁ + w₂x₂ ≥ 0
- No Rain otherwise
这里我们将大于 0 的变量输出为 1,否则是 0。分别代表是否下雨
这里我们可以分别得到两组向量, 和
这样可以得到函数:

更新权重

• :表示第 i 个特征的权重。
• :学习率,控制每次更新的步长。
• :数据点的真实标签。
• :当前权重下,数据点 x 的预测输出。
• :数据点 x 的第 i 个特征值。
这里是计算实际值(label)与当前函数值的差,与学习率相乘,进行一些修正
以下是对我困惑的一些解答,关于为什么会出现 x
通过 x 影响误差修正:如果 很小,说明该特征对误差的贡献较小,那么在更新时,权重的调整幅度应该相应较小。这样,模型就能够在每个特征上做出合适的调整,而不会过度调整那些不太重要的特征。
阈值函数 threshold function
这个阈值函数大概主要是实现上面 的,将数值转换成 0 或 1
其中,“阈值” 大概就是特征之间的数值分界
硬阈值 Hard threshold

缺点是无法表达不确定性(只有 0 或 1)
软阈值 Soft threshold

这个相对更加平滑
支持向量机 Support Vector Machine
这种方法使用一个位于决策边界附近的附加向量(支持向量)来在分离数据时做出最佳决策
最大间隔分离器 Maximum Margin Separator

上图中,三个边界都做到了正确分类。然而,前两个的线都画的与某一边很接近,很容易造成误差,相比之下不如第三种
第三种比较适当,可以较完美分割两种特征的边界,叫做最大间隔分离器
高维分界
SVM 的一个优点是能够表示高维的决策边界,比如非线性的

回归 Regression
回归是把输入点映射到连续值的学习任务

这里有个形状类似的图片,不过不是为了分类,而是为了找到一个函数来拟合变量间/输入输出间的关系
损失函数 Loss Function
损失函数用于量化以上学习结果中,函数的损失(错误)情况
一般来说,损失值越大,则表明这个函数越差
分类问题
分类问题中,可以使用 0-1 损失函数
也就是预测时,Loss 不变;错误时,Loss ++
两种损失函数
这里给出了两种损失函数:L1 与 L2
其中,L2 对于异常值的“惩罚”更加严厉(有平方)
过拟合 Overfitting
过拟合是指模型对于训练数据训练的太好了,导致函数只能对训练数据起作用(Loss 很小),对于测试数据就失灵了

大概像这样
正则化 Regularzation
上面提到了过拟合,这种往往是因为模型为了降低 loss,变得过于复杂导致的
为了避免这种情况,我们可以讲复杂程度引入 Loss 函数,“惩罚”过于复杂的模型
这里的 λ 是一个常数,用于调节“惩罚复杂度”的系数
交叉验证
我们可以通过把所有数据分成 测试集、训练集 来进行检验,避免过拟合
通过在 训练集 上进行训练,得到一个模型,然后通过 测试集 进行测试,衡量模型泛化的能力
然而,这样会使得模型无法学习整个数据集。当遇到数据集较小的时候,会导致训练效果不佳
k 折交叉训练 k-Fold Cross-Validation
为了解决上面的问题,我们使用 k 折交叉训练这个方法
- 讲数据分成 k 个子集
- 进行 k 次训练,每次留出一个数据集作为测试集
- 得到 k 个不同的模型评估,可以对评估取平均,来估计泛化程度
scikit-learn
这是一个 python 中包含机器学习算法的库
示例:假钞
原始数据
原始数据大概这样,最后一列是是否为假钞的布尔值

导入库
首先,导入库;然后选择模型
主要代码
强化学习 Reinforcement learning
强化学习在每个动作后,通过奖励/惩罚的方式给智能体一些反馈

学习过程
- 环境向智能体提供一个状态
- 智能体基于状态执行动作
- 环境返回动作后的状态,以及动作带来的奖励/惩罚
马尔科夫决策过程 Markov Decision Processes
强化学习可以被视作一个马尔科夫决策过程,它有以下特性:
- Set of states S
- Set of actions Actions(S)
- Transition model P(s’ | s, a)
当前状态 s,做出动作 a 后转换到状态s‘的概率
- Reward function R(s, a, s’)
在状态 s 下采取动作 a 转移到状态 s‘ 后所得到的奖励
Q-Learning
Q 学习是强化学习的一种模型,函数 Q(s, a)输出在状态 s 下采取行动 a 的值估计
步骤
- 最初,所有 Q 值都是 0
- 采取行为,收到奖励
- 根据当前奖励和预期的未来奖励,估计 Q 值
- 通过考虑新旧的估计情况,更新 Q 函数
这样一来,Q学习算法能够在学习过程中不断改进自己的决策,而不需要每次都从零开始
公式
其实和前面的感知器有点像,也是借助学习率、差值,进行不断的逼近
贪心决策算法 Greedy Decision-Making
这里利用了一个 max,用来选择能让下一个状态下收益最大的那个行为 a
这里的γ是一个系数,用来调整对于未来奖励的重视程度
含义

利用 与 探索 的权衡
- 利用指的是智能体选择当前已知最优的动作,这些动作通常是基于智能体之前的经验和当前的 Q 值估计的。通过选择回报最高的动作,智能体能够在当前已知的情况下获取最好的结果。
- 探索指的是智能体选择尚未尝试过的动作,即使这些动作当前的回报较低。通过探索,智能体能够尝试新的策略,发现可能的更好路径。
这里其实和之前陷入 local minima 的困境一样,这也是贪心算法的弊端:因为短期利益而放弃其他路线的探索
ε 贪婪算法
在这种算法中,我们将ε设置为希望随机移动的频率。
- 以 1-ε的概率,算法选择最佳移动(利用)
- 以ε的概率,算法选择随机移动(探索)
这个感觉和模拟退火有点像,就是在尽可能最大化当下利益的情况下,加一些小的“扰动”,以尝试不同的可能
结束后反馈
Q 学习如果在每步动作后都进行一个反馈,会导致计算量很大
可以考虑先随机运行,当最终结束时,根据结果给一个奖励/惩罚,感觉有点像强化学习
函数逼近
传统的 Q 学习中,Q 值通常是用一个“Q 值表”来进行表示和赋值
然而,随着情况变得复杂,再弄一个 Q 值表已经不太现实
因此,我们可以尝试用一个函数来逼近 Q 值表,借助函数实现赋值
无监督学习 Unsupervised Learning
相较于监督学习带有 label、或者输出数据,无监督学习只有输入数据存在,AI 将在这些数据中学习一些特征
聚类 Clustering
这是一种无监督学习任务,把输入数据组织成组,使得相似的对象落在同一组中
k-means 聚类

将空间中的所有数据点进行映射,然后在空间中随机放置 k 个聚类中心
然后,每个聚类被分配所有比其他中心更接近其中心的点(这是中间图片)
在迭代过程中,聚类中心移动到所有这些点的中间(右侧的状态)
当重复此过程后,每个点仍然保持在之前相同的聚类中时,我们就达到了平衡,算法结束,留下点在聚类之间划分。