我是靠谱客的博主 陶醉酸奶,最近开发中收集的这篇文章主要介绍深度强化学习详解与实例(一)1. 概率论与蒙特卡洛,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1. 概率论与蒙特卡洛

1.1 概率论基础

在强化学习中会反复用到概率质量函数(Probability Mass Function,PMF)或者概率密度函数(Probability Density Function,PDF)。

  • PMF用来描述离散概率分布,例如抛硬币的概率质量函数如下:

∑ x ∈ X p ( x ) = 1 sum_{x in mathcal{X}} p(x)=1 xXp(x)=1

  • PDF用来描述连续概率分布,例如正态分布就是一种常见的连续概率分布,随机变量 X X X的取值范围是所有实数 R R R,则正态分布的概率密度函数就是:

p ( x ) = 1 2 π σ ⋅ exp ⁡ ( − ( x − μ ) 2 2 σ 2 ) p(x)=frac{1}{sqrt{2 pi} sigma} cdot exp left(-frac{(x-mu)^{2}}{2 sigma^{2}}right) p(x)=2π σ1exp(2σ2(xμ)2)

μ mu μ σ sigma σ分别代表均值和标准差。说明在均值附近的取值的可能性大。

X mathcal{X} X为变量 X X X的取值范围。那概率密度函数就有以下性质:
∫ X p ( x ) d x = 1 int_{mathcal{X}}^{} p(x)dx = 1 Xp(x)dx=1
即概率密度的积分为1。

接着是函数 f ( X ) f(X) f(X)的期望,其定义如下:

  • p ( X ) p(X) p(X) X X X的概率密度函数,对于离散分布, f ( X ) f(X) f(X)的期望是:

E X ∼ P ( ⋅ ) [ f ( X ) ] = ∑ x ∈ X p ( x ) ⋅ f ( x ) E_{Xsim P(cdot )}[f(X)]=sum_{xin mathcal{X}}^{}p(x)cdot f(x) EXP()[f(X)]=xXp(x)f(x)

  • 相应的对于连续分布来说, f ( X ) f(X) f(X)期望是:

E X ∼ P ( ⋅ ) [ f ( X ) ] = ∫ X p ( x ) ⋅ f ( x ) d x E_{Xsim P(cdot )}[f(X)]=int_{mathcal{X}}^{} p(x)cdot f(x)dx EXP()[f(X)]=Xp(x)f(x)dx

下面举一个例子用来消除二元函数中的一个变量:

g ( X , Y ) = X Y g(X,Y)=XY g(X,Y)=XY,设 X = [ 0 , 10 ] mathcal{X}=[0,10] X=[0,10],那么对其求关于随机变量 X X X的期望可以得:
E X ∼ P ( ⋅ ) [ f ( X ) ] = ∫ X p ( x ) ⋅ f ( x ) d x = ∫ 0 10 2 X Y ⋅ 1 10 d x = 5 Y begin{aligned} E_{Xsim P(cdot )}[f(X)] & = int_{mathcal{X}}^{} p(x)cdot f(x)dx\ & = int_{0}^{10} 2XYcdotfrac{1}{10} dx\ & = 5Y end{aligned} EXP()[f(X)]=Xp(x)f(x)dx=0102XY101dx=5Y
显然随机变量 X X X被消掉了。

可以在Python中模拟随机抽样:

from numpy.random import choice

samples = choice(['1','2','3','4'])
size = 100
p=[0.1,0.2,0.3,0.4]#概率设置

print(samples)

以上是模拟从1、2、3、4四个数字中抽取一个,重复100次,每个数字的概率分布是0.1、0.2、0.3、0.4,最后输出实验结果。

在这里插入图片描述

1.2 蒙特卡洛

蒙特卡洛(Monte Carlo)是一大类随机算法的总称,即是一些通过随机样本来估算真实值的算法。

1.2.1 近似 π pi π

假设有一个坐标系,坐标系内有一个边长为2的正方形,中心在(0,0),一个半径为1的圆,圆心为(0,0),然后在正方形区域内任意取点,重复取n次以后求点落在圆内的概率有多大。

很明显,概率显然是圆面积 a 2 a_2 a2与正方形面积 a 1 a_1 a1的面积之比,所以:
p = a 2 a 1 = π 4 p=frac{a_2}{a_1}=frac{pi}{4} p=a1a2=4π
若随机抽样了 n n n次,设圆内点的数量为随机变量 M M M,显然其期望为:
E [ M ] = p n = π n 4 E[M]=pn=frac{pi n}{4} E[M]=pn=4πn
再我们给定的坐标是 ( x , y ) (x,y) (x,y),则若该点在圆内,满足:
x 2 + y 2 ≤ 1 x^2+y^2le1 x2+y21
所以当我们的随机抽样的次数 n n n非常大时,随机变量 M M M的真实观测值 m m m就会非常接近期望 E [ M ] = π n 4 E[M]=frac{pi n}{4} E[M]=4πn,对公式做变换得:
m ≈ 4 m n mapproxfrac{4m}{n} mn4m
即可求出 π pi π的近似值。

代码如下:

import numpy as np

def test(n):
    m = 0
    for i in range(n):
        x = np.random.uniform(-1, 1, 1)  # 指定均匀分布
        y = np.random.uniform(-1, 1, 1)
        pos = x*x + y*y
        if pos <= 1:
            m = m + 1
    # print(pi)
    pi = (4*m)/n
    return pi


import test

if __name__ == '__main__':
    pi = []
    pi.append(test.test(100))
    pi.append(test.test(1000))
    pi.append(test.test(10000))
    pi.append(test.test(100000))
    pi.append(test.test(1000000))
    print(pi)

输出如下:

在这里插入图片描述

可见随着抽样次数的增加, π pi π的值越来越接近 π pi π的真实值。

下一节将继续举类似的随机算法。

最后

以上就是陶醉酸奶为你收集整理的深度强化学习详解与实例(一)1. 概率论与蒙特卡洛的全部内容,希望文章能够帮你解决深度强化学习详解与实例(一)1. 概率论与蒙特卡洛所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部