November
28th,
2018
1、与之前不同,抛弃策略梯度,利用策略迭代法;2、拟合值函数迭代法特点:off-policy,低方差;收敛性不确定
November
27th,
2018
1、因果关系policy gradient引入了Q函数,但这个Q函数只使用一个样本,因此高方差。希望用神经网络(低方差)代替Q函数,以权衡偏差-方差问题;2、利用单步近似整条轨迹,用V函数近似表示未来总收益,比policy-gradient多一步V函数网络的训练;3、batch与online版本;4、actor-critic与MC采样在偏差-方差上的权衡
November
26th,
2018
1、特点:不需要初始状态以及转移概率,即我们可以在任意环境中直接进行抽样生成样本;on-policy,导致数据利用率低;2、有限采样导致高方差问题,通过因果关系、baseline解决;3、off-policy改进:重要性采样
November
23rd,
2018
马尔可夫决策过程 4种增强学习算法简介
November
21st,
2018
1、强化学习的数学描述为序列决策问题;2、模仿学习相当于将序列决策问题简化为监督学习,因此会丢失序列前后关联性;3、模仿学习产生轨迹漂移,解决办法是增加稳定器或DAgger算法;4、DAgger算法利用新策略采样数据加入原数据集,使得训练数据得到的轨迹分布与运行策略得到的轨迹分布一致
November
20th,
2018
熵
条件熵
互信息
交叉熵
相互熵
September
26th,
2018
头文件
头文件多重包含
- 问题:产生重复定义
#define
保护,注意宏名字不能冲突。编译器每次需要打开头文件判断是否冲突,编译时间较长
// foo/src/bar/baz.h
#ifndef FOO_BAR_BAZ_H_
#define FOO_BAR_BAZ_H_
int a;
#endif
#pragma once
,由编译器提供保证
前置声明
# include "A.h"
class B{
A* p;
}
class A;
class B{
A* p;
}
- 优点
- 节省编译时间,
#include
会展开更多文件
- 节省重新编译时间,修改头文件不需要重新编译
- 缺点(会带来诸多隐藏错误,增加程序员负担)
- 建议:函数总是使用
#include
,类模板优先使用#include
????
include顺序
- 当前
.cc
文件对应的头文件(优先对当前的头文件进行测试)
- C系统文件,C++系统文件
- 其他库
.h
文件,基于平台的条件编译
- 本项目包含
.h
文件
#include "foo/public/fooserver.h" // 优先位置
#include <sys/types.h>
#include <unistd.h>
#include <hash_map>
#include <vector>
#include "base/basictypes.h"
#include "base/commandlineflags.h"
#include "foo/public/bar.h"
作用域
匿名命名空间和静态变量
- 作用:用来定义一个不需要被外部引用的变量
- 在
.cc
中使用,不在.h
中使用(会在每个引用的.cc
文件中各自生成一个变量)
非成员函数、静态函数、全局函数
- 建议
- 非成员函数放在命名空间,不使用全局函数
- 不要用类的静态函数模拟命名空间
- 原因:一个编译单元的函数被另一个编译单元调用时,会引入链接时的依赖性
静态变量、全局变量
- 静态生存周期的对象,包括全局变量、静态变量、静态类成员变量、函数静态变量,都必须是原生数据类型
- 原因:同一个编译单元内静态初始化优先于动态初始化,初始化、销毁顺序确定。不同的编译单元之间初始化和销毁顺序属于未明确行为。
函数
引用参数
- 输入参数必须为值或
const
引用
- 有时可能会用
const
指针,涉及到空指针或地址操作时
缺省参数
其他
RTTI
- 不要滥用RTTI,除非是单元测试
- 好处:单元测试时,用来检测工厂方法新建对象是否为期望值
流
- 使用
printf
代替流,除非是记录日志
- 缺点:流被重载,输出时不进行类型检查;某些格式化操作效率很低
使用前置自增/自减
September
12th,
2018
经济学原理-笔记
July
15th,
2018
cpp和python总结,各种类型
July
15th,
2018
个人项目总结,风格迁移