- 博客(34)
- 收藏
- 关注
原创 强化学习 | 蘑菇书阅读笔记 | 第七章 DQN(进阶技巧)
Q^值总是被高估。下图中,假设横坐标是a,纵坐标是Q^,蓝色是实际值,绿色是被高估的值。我们总倾向于选择《Q^值被高估的动作a》计算目标函数,因此目标函数往往被高估。
2023-03-05 09:34:36
572
原创 强化学习 | 蘑菇书阅读笔记 | 第六章 DQN(基础概念)
传统的强化学习用表格存储V或Q,但是如果状态数无限,就需要。其中s,a为s和a的向量表示,而Qφ(s,a)为一个函数,通常是一个网络,输出实数。它被称为。
2023-03-04 21:23:27
326
原创 论文 | SeqGAN
用GAN生成序列数据有两个问题:1. 生成模型产生的数据是离散的;梯度更新的时候,微小的改变难以在离散的空间中找到对应的词汇。2. 判别模型只能处理完整的序列数据。SeqGAN用强化学习的方法解决了梯度问题,并用MC方法使其能够处理不完整的数据。
2023-03-04 15:20:53
124
原创 强化学习 | 课堂笔记 | 第二课 DPP/近似DPP/Q函数
Q:贝尔曼方程和贝尔曼最优方程都可以用迭代的方法求解。解贝尔曼方程是为了评估一个给定的策略,评估完之后可以去优化这个策略,这是策略迭代的方法。解贝尔曼最优方程是为了找到一个最优的价值函数,进而找到最优的策略,是价值迭代的方法。总之,策略迭代使用贝尔曼方程,价值迭代使用贝尔曼最优方程。压缩映像原理:x=J(x)存在唯一不动点的充分条件是:||J(x)-J(y)||≤λ||x-y||, λ
2023-02-27 16:33:49
502
原创 强化学习 | 蘑菇书阅读笔记 | 第五章 近端策略优化(PPO)
如果我们能从p中采样,那么可以用MC来估计如果不能直接从p中采样,但是可以从q中采样,则可以用重要性估计:但需要注意,两者不能相距太远。因为虽然它们期望一样,方差却不一样。区别在第一项因此,重要性采样的一个缺点是:必须样本充足,否则可能引起巨大的问题。例如下图中,如果对p采样,f(x)的均值显然是负数。如果对q采样,样本很少的情况下,只会采样到f(x)>0的情况,那么估计的期望就是正数。但如果样本足够多,即使采到左边一两个点,也会因为权重很大而把估计值拉回到负数。
2023-02-27 09:04:55
387
原创 强化学习 | 蘑菇书阅读笔记 | 第四章 策略梯度
用pθ(τ)表示一个策略,其中θ是参数。我们希望找到最佳的τ,使得回报的期望最大。梯度不能求,但是我们可以将它转换一下写成期望的形式此时就可以用MC来估计这个期望。
2023-02-26 11:00:07
236
原创 强化学习 | 蘑菇书阅读笔记 | 第三章 表格型方法
策略最简单的是查找表(look up table),即表格型方法(tarbular method),如MC,Q-learning和sarsa。
2023-02-25 13:52:13
176
原创 强化学习 | 蘑菇书阅读笔记 | 第一章 强化学习基础
此外,演员-评论员算法同时使用策略和价值评估来做出决策。其中,智能体会根据策略做出动作,而价值函数会对做出的动作给出价值,这样可以在原有的策略梯度算法的基础上加速学习过程,取得更好的效果。是对状态的部分描述,可能会遗漏一些信息。环境可以分为完全可观测(马尔科夫决策过程)和部分可观测。优缺点:有模型可以缓解数据匮乏的问题,免模型泛化能力更强。区别:有模型智能体会对下一步环境和奖励进行预测。是对世界的完整描述,不会隐藏世界的信息。下图的Gt指的是t时刻开始的折扣回报。大部分的深度学习方法用的是免模型。
2023-02-22 09:49:21
475
原创 动手学深度学习 | 数据操作
将数组沿着某一维度相加。如下例,第1行增加了第0行;第2行增加了第0,1 行;第3行增加了第0,1,2行。【向量的】L2范数:平方和的平方根。【矩阵的】F范数:平方和的平方根。【向量的】L1范数:绝对值之和。
2023-02-19 16:34:19
306
原创 Python入门 | 那些会导致重新分配内存的操作
可变的数据可以直接修改而不会重新分配内存,但仅限于使用修改操作,如果创建一个同名变量再赋值肯定还是会重新分配内存的。tensor也是可变类型,如果用tensor+=1就不会改变地址,如果用tensor=tensor+1就会改变地址。但对于不可变类型,不管怎么操作,都一定会改变地址。可变(列表、字典)与不可变(数字,字符串,元组)可迭代(列表,元组)与不可迭代。
2023-02-19 12:45:06
538
原创 Python入门 | 面向对象
我们可以定义类属性slots, 是一个元组的形式,里面用字符串记录所有可以使用的实例属性。实例方法绑定到实例。当类调用实例方法时,没有默认传参,所以有几个参数就要传几个(也就是说,第一个参数应该是实例对象)。这就可以解释为什么实例方法和类方法在定义时一定要有个self或cls,因为如果定义时不写参数,而调用时有一定至少会传入一个参数,那么就会报错。类属性可以通过类和对象访问,实例属性只能通过对象访问。子类中不含父类的私有属性,但是子类可以调用父类的《访问自己私有属性的方法》来访问这个私有属性。
2023-02-19 11:11:03
775
原创 bash | grep与egrep
扩展正则的符号:(){} | ?+这些符号无法被grep识别(除非加\),但是可以被egrep识别(除非加\)例如:
2022-02-18 10:52:02
640
原创 c | 结构体的定义
struct student{ int age; string name; student(int a,string n):age(a),name(n){}};int main(){ student I=student(20,"ye"); cout<<I.age<<","<<I.name<<endl; return 0;}
2022-02-17 20:59:06
145
原创 c++中的构造函数用法
一、//构造函数struct student{ string name; int age; student(){} student(string n,int a):name(n),age(a){}};int main(){ student mike=student("Mike",20); cout<<mike.name<<","<<mike.age<<endl; student who;
2022-02-04 10:56:59
339
原创 c++中队列(queue)的用法
打印int printqueue(queue<int>q){ for(int i=0;i<q.size();i++){ printf("%d ",q.front()); q.push(q.front()); q.pop(); } printf("\n"); return 0;}基本用法//队列的应用int main(){ queue<int>q; //push和
2022-02-04 10:24:35
707
原创 c++中vector的用法
目录打印创建状态插入和删除尾部元素的插入和删除迭代器打印int print(vector<int>v){ for(int i=0;i<v.size();i++) printf("%d ",v[i]); printf("\n"); return 0;}创建int ma[]={1,2,3,4,5}; vector<int>v1;// vector<int>v2(ma..
2022-02-04 09:05:27
345
原创 Pytorch | torch.max()的用法
如果只输入一个张量作为参数,那么不管输入的张量是几维的,返回的都是一个数字张量,它是输入张量的最大值。xx=torch.tensor([1,2,3,4])print(torch.max(xx))yy=torch.tensor([[1,2,3,4],[2,5,1,3]])print(torch.max(yy))如果输入是多维张量,可以多一个"维度”参数。例如,max(tensor1,0)表示想在第0维找最大值,max(tensor1,1)表示想在第1维找最大值。这时就会返回两个tensor
2022-01-31 09:22:43
2013
原创 Pytorch | 训练模型计算损失时“log_softmax_lastdim_kernel_impl“ not implemented for ‘Long‘报错及解决
问题下面这段代码会报错:"log_softmax_lastdim_kernel_impl" not implemented for 'Long'criterion = nn.CrossEntropyLoss()x=torch.tensor([[0,1,0,5]])y=torch.tensor([3])l=criterion(x,y)解决方案将x=torch.tensor([[0,1,0,5]])改成x=torch.tensor([[0,1,0,5]],dtype=torch...
2022-01-31 09:00:09
8925
3
原创 PyTorch | Autograd
一、requires_gradrequires_grad是tensor类的一个属性,默认是false。可以在初始化时用requires_grad参数来确定,也可以通过tensor.requires_grad_(bool)函数来改变既有tensor是否需要自动求导。x=torch.ones(3,2)print(x.requires_grad)y=torch.ones(3,2,requires_grad=True)print(y.requires_grad)x.requires_gra
2022-01-30 16:45:55
640
原创 PyTorch | torch和numpy之间的转换
目录1 tensor->array(tensor.numpy())2 array->tensor(torch.from_numpy(array))1 tensor->array(tensor.numpy())x=torch.ones(3,2)y=x.numpy()print(x)print(y)底层是一样的数据x.add_(1)print(x)print(y)但是,如果不用add命令,而是用+,则两者又会不一样x=x+zprint(
2022-01-30 15:56:25
1635
原创 PyTorch | tensor的创建和基本运算
一、创建1.1 基本的创建函数x1=torch.empty(3,2)x2=torch.rand(3,2)x3=torch.zeros(3,2)x4=torch.ones(3,2)print(x1)print(x2)print(x3)print(x4)1.2 指定类型上述的函数都可以用dtype参数指定类型y2=torch.rand(3,2,dtype=torch.double)y21.3 指定形状可以用xx_like函数指定一个旧的tensor的形状
2022-01-30 14:28:24
1137
原创 系统命名法(IUPAC命名法)
目录一、烷烃选主链标序号写名称二、烯烃和炔烃选主链标序号写名称三、苯及其同系物苯的同系物规则例子四、多官能团氧化程度例子一、烷烃选主链选择最长的如果一样长,则选择支链多的为主链标序号使最近的支链序号最小两端等距不同基,起点接近简单基。例如,下图为3-甲基-4-乙基己烷两端等距又同基,遵循最低序列原则写名称有相同支链可合并有不同支链,就把简单地卸载前面,复杂的写在后面两端等距又同基,遵循..
2022-01-30 13:44:47
51992
原创 《统计学习方法》第二章 感知机
一、感知机模型感知机模型是一种二分类的线性分类模型,输入为输入空间(特征空间)的n维向量,输出为{-1,1},属于判别模型。f(x)=sign(w*x+b),w,x∈Rn,b∈R感知机的假设空间{f|f(x)=w*x+b}w*x+b是特征空间中的一个超平面,w是超平面的法向量,b是超平面的截距。这个超平面将空间划分为两个部分。这个超平面S又称为分离超平面。二、感知机学习策略2.1 数据集的线性可分性某数据集线性可分↔存在完全正确的分离超平面。即,对于所有y=1的实例,w*x+b&
2022-01-27 21:27:27
768
原创 《统计学习方法》第一章 统计学习方法概论
目录目录一、交叉验证1.1 简单交叉验证1.2 S折交叉验证1.3 留一交叉验证二、生成模型与判别模型统计学习包括监督学习、非监督学习、半监督学习和强化学习,本书主要讨论的是监督学习。区分分类问题与回归问题的标准:输出变量是否为连续值。假设空间:模型∈由输入空间到输出空间的映射的集合,这个集合就是假设空间(hypothesis space)。假设看空间的确定意味着学习范围的确定。一、交叉验证常见的模型选择方法有正则化和交叉验证。如果样本充足,常见的方法...
2022-01-27 20:14:07
587
原创 C++中String的应用
#include <iostream>#include <cstdio>#include <string>using namespace std;int main(){ string s1="helloworld"; string s2; string s3(s1); string s4(s1,3,2);//从3开始输出2个 string s5(s1,2);//从2开始一直到最后 string s6(10,'h.
2022-01-27 16:16:58
731
原创 Pytorch中nn.Embedding的原理及使用
参数1:vocab的大小参数2:d_model参数3(padding_idx):可选参数,原张量中置为idx的词,都被映射成一个长为d_model的零向量例1embedding=torch.nn.Embedding(10,3)input = torch.LongTensor([[1,2,4,5],[4,3,2,9]])embedding(input)例2embedding=torch.nn.Embedding(10,3)input = torch.LongTensor(
2022-01-26 13:00:32
1730
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅