流程控制之-条件语句

判断语句 if

if判断示例:

1
2
3
//初始化与判断写在一起: if a := 10; a == 10
if i == '3' {
}

if的特殊写法:

1
2
if err := Connect(); err != nil {         // 这里的 err!=nil 才是真正的if判断表达式
}

运算符

运算符汇总

1
2
3
4
5
6
算术运算符:	+	-	*	/	%	++	--	
关系运算符: == != <= >= < >
逻辑运算符: ! && ||
位运算: &(按位与) |(按位或) ^(按位取反) <<(左移) >>(右移)
赋值运算符: = += -= *= /= %= <<= >>= &= ^= |=
其他运算符: &(取地址) *(取指针值) <-(Go Channel相关运算符)

标识符

关键字(25个)

1
2
3
4
if      for     func    case        struct      import               
go type chan defer default package
map const else break select interface
var goto range return switch continue fallthrough

Temporal-Difference Learning

时序差分(Temporal-Difference)简介

  • 时序差分是强化学习的核心观点。
  • 时序差分是DP和MC方法的结合。
  • MC要等一个完整的序列结束,比如玩21点扑克,直到玩完才能知道是胜是负;相反,时序差分每经历一步,都会更新价值函数,因为每一步都会观察到一个新的Reward,比如Grid World,每走一步都知道reward是什么。
  • TD往往比MC高效;TD和MC都使用经验(experience)来解决预测问题。
  • 所谓差分就是下一个时刻的估计和当前时刻的估计的差。

Monte Carlo Methods

蒙特卡洛方法简介

使用蒙特卡洛方法不需要像DP一样,对环境要有完整的知识,而是通过经验去学习。所谓经验就是对状态、动作、奖励的采样(sample sequence)。

用sample的均值去近似期望。


Dynamic Programming

DP方法简介

  • 由于其大量的计算损耗,已经不实用,但理论上非常重要
  • 本书后续的所有方法可以看做想要取得和DP类似的效果;只不过是减少了计算或者假设没有完美的环境模型。
  • 假设解决的问题是有限的MDP,即给定动作a,状态s,和奖励r,可以通过\(p(s',r|s,a)\)描述动态变化。

提升方法

笔记摘要

  • 在PAC(概率近似正确(PAC, Probably approximately correct))学习框架下,一个概念是强可学习的充分必要条件是这个概念是弱可学习的。
  • 提升方法的两个问题
  1. 在每一轮如何改变训练数据的权值或概率分布
  2. 如何将弱分类器组合成一个强分类器
  • Adaboost的解决方案:
  1. 提高那些被前一轮弱分类器错误分类样本的权值,降低那些被正确分类的样本的权值
  2. 加权多数表决的方法,加大分类误差率小的弱分类器的权值,减小分类误差率大的弱分类器的权值

支持向量机

笔记摘要

  • SVM的基本模型是定义在特征空间上的间隔最大的线性分类器
  • 线性可分支持向量机和线性支持向量机假设输入空间和特征空间的元素一一对应,并将输入空间中的输入映射为特征空间的特征向量;非线性支持向量机利用一个从输入空间到特征空间的非线性映射将输入映射为特征向量
  • 支持向量机的学习策略就是间隔最大化,可形式化为一个求解凸二次规划的问题,也等价于正则化的合页损失函数最小化问题
  • 仿射变换是保凸变换
  • 通过使用核函数可以学习非线性支持向量机,等价于隐式地在高维的特征空间中学习线性支持向量机