联系方式:860122112@qq.com

小脑神经网络
小脑神经网络(CMAC-Cerebellar Model Articulation Controller)是由Albus最初于1975年基于神经生理学提出的,它是一种基于局部逼近、简单快速的神经网络,能够学习任意多维非线性拟合。相比于BP网络等全局逼近方法,CMAC具有以下优点

-局部学习,每次修改权值少,学习速度快,适合在线学习
-具有一定的泛化能力,即相近输入产生相近输出,不同输入给出不同输出
-具有连续(模拟)输入输出能力
-采用寻址编程方式,在利用串行计算机仿真时,它将使响应速度加快
-对学习数据出现的次序不敏感

CMAC最初主要用来求解机械手的关节运动,后来被进一步应用于机械人控制、模式识别、信号处理以及自适应控制等领域

CMAC结构
CMAC最大特点是局部逼近,因此它具有特殊的结构。

这里写图片描述

如上图,假设输入是二维,即 X=(x1,x2) <script type="math/tex" id="MathJax-Element-79">X=(x_1,x_2)</script>, x1,x2[0,5] <script type="math/tex" id="MathJax-Element-80">x_1,x_2\in[0,5]</script>(即使不是也可以先标准化, [0,5] <script type="math/tex" id="MathJax-Element-81">[0,5]</script>不是固定的,可以是其他,本文只是为了好理解而使用这个范围)。
(1)每一维的输入 xi <script type="math/tex" id="MathJax-Element-82">x_i</script>都具有层 m <script type="math/tex" id="MathJax-Element-83">m</script>和块nb<script type="math/tex" id="MathJax-Element-84">nb</script>的概念(注意,这个层的意思和一般神经网络层的意思不一样)。在图中Tier是层的意思,也就是每一维具有 m=4 <script type="math/tex" id="MathJax-Element-85">m=4</script>层,每层有 nb=2 <script type="math/tex" id="MathJax-Element-86">nb=2</script>块,例如第一层Tier1具有两个块A、B。根据 m <script type="math/tex" id="MathJax-Element-87">m</script>和nb<script type="math/tex" id="MathJax-Element-88">nb</script>确定每一维等分切片的个数,即 m(nb1)+1 <script type="math/tex" id="MathJax-Element-89">m\cdot(nb-1)+1</script>,例如上图中,每维被切分为4*(2-1)+1=5等份。
(2)输入的维度之间,相同的层所激活的块联合起来对应一个权值地址空间。如上图,当前 X=(3.5,3.3) <script type="math/tex" id="MathJax-Element-90">X=(3.5,3.3)</script>, x1 <script type="math/tex" id="MathJax-Element-91">x_1</script>在不同层激活的块是B、D、F、G, x2 <script type="math/tex" id="MathJax-Element-92">x_2</script>是b、d、f、g,此时所对应的权值索引是Bb、Dd、Ff、Gg,把这4个权值加起来就是输出。由此可以看出,有多少层就激活多少个权值。同时,不存在同维度块联合、不同维度不同层块联合的情况,也就是说不存在AB、AC、Ad等情况。由此算来,可能使用到的权值个数为 mnbn <script type="math/tex" id="MathJax-Element-93">m\cdot nb^n</script>, n <script type="math/tex" id="MathJax-Element-94">n</script>为输入的维度。
(4)一般CMAC网络的整体构架如下图,第一层是输入层;第二层是虚拟联想空间,即对应上图的Aa、Ab、Ba、Bb……;第三层是物理存储空间,即根据第二层给出的索引找到对应的权值;第四层即输出层。
这里写图片描述
(5)如果输入维度很大,根据mnbn<script type="math/tex" id="MathJax-Element-95">m\cdot nb^n</script>,权值个数指数增长,然而也许只有少部分的权值被使用(有些权值从来没被激活),所以可以使用哈希表方法存储权值,减小无用空间的开支。
(6)权值更新公式为
wt+1=wt+α/me <script type="math/tex" id="MathJax-Element-96">w_{t+1}=w_t+\alpha/m\cdot e</script>
α <script type="math/tex" id="MathJax-Element-97">\alpha</script>为学习率, m <script type="math/tex" id="MathJax-Element-98">m</script>是层的个数,e<script type="math/tex" id="MathJax-Element-99">e</script>为样本真值与网络预测的误差,只有激活的权值被更新。其实可以把 m <script type="math/tex" id="MathJax-Element-100">m</script>拿掉,看成使用一般神经网络的梯度下降法。

模糊小脑神经网络(FCMAC)结构
FCMAC实际上就是在每个块里面加入了一个模糊隶属度函数,例如如果使用的是高斯模糊,则是在块里加入高斯函数,如下图:
这里写图片描述

高斯函数的均值μ<script type="math/tex" id="MathJax-Element-101">\mu</script>和标准差 σ <script type="math/tex" id="MathJax-Element-102">\sigma</script>可以固定,也可以是可调整的,类似CMAC的权值更新方法,用求梯度的方法就可以迭代更新 μ <script type="math/tex" id="MathJax-Element-103">\mu</script>和 σ <script type="math/tex" id="MathJax-Element-104">\sigma</script>了,当然,只有被激活的块才会更新。FCMAC网络整体构架图:
这里写图片描述

CMAC和FCMAC相关代码
https://github.com/DajunZhou/Gauss_CMAC

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐