首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MATLAB强化学习入门——三、深度Q学习与神经网络工具箱

上一期的文章《网格迷宫、Q-learning算法、Sarsa算法》的末尾,我们提到了Q学习固有的缺陷:由于智能体(agent)依赖以状态-动作对为自变量的Q函数表(Q Function Table)来形成对当前状态的估计,并以此为依据利用策略π选择动作。Q函数表就必须包含智能体在环境中所可能出现的所有动作-状态对及其对应Q值。显然,当一个多步决策问题变得足够复杂甚至变为连续决策或控制问题时,Q学习本身是无力应对的。例如,对于复杂的多步决策问题,庞大而结构复杂的Q表将变得难以存储和读取;将网格迷宫的长、宽各扩大10倍,Q表则变成原来的100倍。对于连续决策/控制问题时,Q表更是无法记录所有的状态。 那么,如何解决这一问题呢? 一个直截的想法就是,选择某个多元函数,逼近Q表中“自变量”动作-状态对与“因变量”Q值形成的关系。但这样做依然存在问题:对于不同的强化学习问题,Q表中的数据呈现出各异的曲线特性,只有找到符合Q表数据的函数形式,才可能良好的逼近Q表。选择传统函数进行逼近,显然是很难实现编程自动化的。 神经网络(Neural Network)恰恰是这么一种有别于传统函数逼近的解决方案。而从数学的角度讲,神经网络本质上就是一种强大的非线性函数逼近器。将神经网络与Q学习结合起来,就得到了能够解决更复杂问题的Q-Network以及使用深度神经网络的Deep-Q-Network (DQN)。 Deep-Q-Learning的算法究竟是什么样的?浙江大学的《机器学习和人工智能》MOOC有着大致的讲解。而如何实现Deep-Q-Learning?莫烦Python以及北理工的MOOC也给出了Python语言的详细示范。 尽管有关Deep-Q-Learning的程序和讲解已经很多权威且易懂的内容;准确的理解Deep-Q-Learning算法,并在MatLab上实现,则是完成强化学习控制这个最终目标的关键。具体到Deep-Q-Learning的实现上,它不仅与之前的Q-Learning在程序结构上有着相当大的区别,直接将它应用于连续控制问题也会是非常跳跃的一步。因此,在这一期的文章里,问题将聚焦在前后两个问题之间:如何使用神经网络让智能体走好网格迷宫? 将这个问题再细分开来,则包括两部分:

04
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    如何利用matlab做BP神经网络分析(利用matlab神经网络工具箱)[通俗易懂]

    最近一段时间在研究如何利用预测其销量个数,在网上搜索了一下,发现了很多模型来预测,比如利用回归模型、时间序列模型,GM(1,1)模型,可是自己在结合实际的工作内容,发现这几种模型预测的精度不是很高,于是再在网上进行搜索,发现神经网络模型可以来预测,并且有很多是结合时间序列或者SVM(支持向量机)等组合模型来进行预测,本文结合实际数据,选取了常用的BP神经网络算法,其算法原理,因网上一大堆,所以在此不必一一展示,并参考了bp神经网络进行交通预测的Matlab源代码这篇博文,运用matlab 2016a,给出了下面的代码,并最终进行了预测

    01

    bp神经网络及matlab实现_bp神经网络应用实例Matlab

    BP(Back-propagation,反向传播)神经网络是最传统的神经网络。当下的各种神经网络的模型都可以看做是BP神经网络的变种(虽然变动很大…)。 这东西是干什么用的呢? 我们在现实中要处理的一切问题映射到数学上只分为两类,可归纳的问题与不可归纳的问题。首先什么是不可归纳的问题,举个例子,你不能用一套完美的数学公式去表达所有的质数 , 因为目前的研究表明,还没有什么方法是能够表达质数的,也就是说,质数的出现,本身不具备严格的数学规律,所以无法归纳。 但是我们人眼看到猫猫狗狗的图片就很容易分辨哪个是猫,哪个是狗。这说明在猫和狗之间,确实存在着不同,虽然你很难说清楚它们的不同到底是什么,但是可以知道,这背后是可以通过一套数学表达来完成的,只是很复杂而已。 大部分AI技术的目的就是通过拟合这个复杂的数学表达,建立一个解决客观问题的数学函数。BP神经网络的作用也是如此。 BP神经网络这个名字由两部分组成,BP(反向传播)和神经网络。神经网络是说这种算法是模拟大脑神经元的工作机理,并有多层神经元构成的网络。 而这个名字的精髓在BP上,即反向传播。反向传播是什么意思呢。这里举个例子来说明。 比如你的朋友买了一双鞋,让你猜价格。 你第一次猜99块钱,他说猜低了。 你第二次猜101块钱,他说猜高了。 你第三次猜100块钱,他说猜对了。 你猜价格的这个过程是利用随机的数据给出一个预测值,这是一个正向传播。 而你的朋友将你的预测值与真实值进行对比,然后给出一个评价,这个过程是一个反向传播。 神经网络也是类似的过程,通过对网络的超参数进行随机配置,得到一个预测值。这是一个正向传播的过程。而后计算出预测值与真实值的差距,根据这个差距相应的调整参数,这是一个反向传播的过程。通过多次迭代,循环往复,我们就能计算出一组合适的参数,得到的网络模型就能拟合一个我们未知的复杂函数。 我们来看这个BP神经网络的示意图

    02

    bp神经网络应用实例(简述bp神经网络)

    clear; clc; TestSamNum = 20; % 学习样本数量 ForcastSamNum = 2; % 预测样本数量 HiddenUnitNum=8; % 隐含层 InDim = 3; % 输入层 OutDim = 2; % 输出层 % 原始数据 % 人数(单位:万人) sqrs = [20.55 22.44 25.37 27.13 29.45 30.10 30.96 34.06 36.42 38.09 39.13 39.99 ... 41.93 44.59 47.30 52.89 55.73 56.76 59.17 60.63]; % 机动车数(单位:万辆) sqjdcs = [0.6 0.75 0.85 0.9 1.05 1.35 1.45 1.6 1.7 1.85 2.15 2.2 2.25 2.35 2.5 2.6... 2.7 2.85 2.95 3.1]; % 公路面积(单位:万平方公里) sqglmj = [0.09 0.11 0.11 0.14 0.20 0.23 0.23 0.32 0.32 0.34 0.36 0.36 0.38 0.49 ... 0.56 0.59 0.59 0.67 0.69 0.79]; % 公路客运量(单位:万人) glkyl = [5126 6217 7730 9145 10460 11387 12353 15750 18304 19836 21024 19490 20433 ... 22598 25107 33442 36836 40548 42927 43462]; % 公路货运量(单位:万吨) glhyl = [1237 1379 1385 1399 1663 1714 1834 4322 8132 8936 11099 11203 10524 11115 ... 13320 16762 18673 20724 20803 21804]; p = [sqrs; sqjdcs; sqglmj]; % 输入数据矩阵 t = [glkyl; glhyl]; % 目标数据矩阵 [SamIn, minp, maxp, tn, mint, maxt] = premnmx(p, t); % 原始样本对(输入和输出)初始化 SamOut = tn; % 输出样本 MaxEpochs = 50000; % 最大训练次数 lr = 0.05; % 学习率 E0 = 1e-3; % 目标误差 rng('default'); W1 = rand(HiddenUnitNum, InDim); % 初始化输入层与隐含层之间的权值 B1 = rand(HiddenUnitNum, 1); % 初始化输入层与隐含层之间的阈值 W2 = rand(OutDim, HiddenUnitNum); % 初始化输出层与隐含层之间的权值 B2 = rand(OutDim, 1); % 初始化输出层与隐含层之间的阈值 ErrHistory = zeros(MaxEpochs, 1); for i = 1 : MaxEpochs HiddenOut = logsig(W1*SamIn + repmat(B1, 1, TestSamNum)); % 隐含层网络输出 NetworkOut = W2*HiddenOut + repmat(B2, 1, TestSamNum); % 输出层网络输出 Error = SamOut - NetworkOut; % 实际输出与网络输出之差 SSE = sumsqr(Error); % 能量函数(误差平方和) ErrHistory(i) = SSE; if SSE < E0 break; end % 以下六行是BP网络最核心的程序 % 权值(阈值)依据能量函数负梯度下降原理所作的每一步动态调整量 Delta2 = Error; Delta1 = W2' * Delta2 .* HiddenOut .* (1 - HiddenOut); dW2 = Delta2 * HiddenOut'; dB2 = Delta2 * ones(TestSamNum, 1); dW1 = Delta1 * SamIn'; dB1 = Delta1 * ones(TestSamNum, 1); % 对输出层与隐含层之间的权值和阈值进行修正 W2 = W2 + lr*dW2; B2 = B2 + lr*dB2; % 对输入层与隐含层之间的权值和阈值进行修正 W1 = W1 + lr*dW1; B1 = B1 + lr*dB1; end HiddenOut = logsig(W1*SamIn + repmat(B1, 1, TestSamNum)); % 隐含层输出最终结果 NetworkOut = W2*HiddenOut + repmat(B2, 1, TestSamNum); % 输

    03

    论文阅读---Reducing the Dimensionality of Data with Neural Networks

    通过训练多层神经网络可以将高维数据转换成低维数据,其中有对高维输入向量进行改造的网络层。梯度下降可以用来微调如自编码器网络的权重系数,但是对权重的初始化要求比较高。这里提出一种有效初始化权重的方法,允许自编码器学习低维数据,这种降维方式比PCA表现效果更好。 降维有利于高维数据的分类、可视化、通信和存储。简单而普遍使用的降维方法是PCA(主要成分分析)--首先寻找数据集中方差最大的几个方向,然后用数据点在方向上的坐标来表示这条数据。我们将PCA称作一种非线性生成方法,它使用适应性的、多层“编码”网络将

    04

    斯坦福CS231n - CNN for Visual Recognition(5)-lecture5激活函数、神经网络结构

    在线性分类中,我们使用s=Wxs=Wx计算类别的评分函数,其中WW为一个矩阵,xx为一个列向量,输出表示类别的评分向量。而在神经网络中,最常用的是s=W2max(0,W1x)s=W_2max(0,W_1x),其中函数max(0,−)max(0,-)是非线性的,也可以使用其他的一些非线性函数。如果没有非线性函数,那么对于分类的评分计算将重新变成关于输入的线性函数。因此,非线性函数是改变的关键。参数W1,W2W_1,W_2通过随机梯度下降来学习,他们的梯度在反向传播过程中,通过链式法则求导得出。类似地,一个三层地神经网络评分函数为s=W3max(0,W2max(0,W1x))s=W_3max(0,W_2max(0,W_1x))

    01

    【Matlab量化投资】基于神经网络的利率债16国开10收益率预测模型

    以往大家接触的量化投资与机器学习在股票和期货上运用的较多,然而大家却忽略了一个重要的金融市场,那就是债券市场。今天小编就告诉大家机器学习在债券市场上的运用。在机器学习中有一个非常重要的模型—神经网络模型。 by编辑部:李齐 一、利用BP网络模型仿真成本分析的原理 建立如图所示为一个三层神经网络结构。它具有:(1)输入层。用来输入资源动因数据、或作业中心成本。(2)中间层。也称为处理层或隐层,处理输入层的数据并为输出层传递信息。(3)输出层。它以中间层的输出作为输入,再经处理给出网络的最终输出。若共有m个输

    09
    领券