模拟分立器件搭建多层感知机(MLP)(应用拟合回归)

模拟分立器件搭建MLP(应用拟合回归)

概述

刚刚接触MLP(多层感知机),又有一点本科模拟电路设计浅显的基础,就弄了一个分立器件的MLP玩了玩,网络大小112*1较简单,在硬件层面只能完成一些比较简单的曲线拟合,样本回归任务,精度最高也超过了99%,速度是和GPU是差不多的达到微秒级,比CPU快3个数量级。毕竟架构不一样,再简单的系统也算个存算一体了。

运算电路原理

MLP网络架构

基本网络架构如下,有两个隐含层,三个节点需要**函数,输出层直接线性相加,由于硬件电路权值均为正数,因此需要一个减函数提供递减因子,来完成拟合效果。
模拟分立器件搭建多层感知机(MLP)(应用拟合回归)

运算原理

MLP每一个节点是由 Y = F ( w ∗ X + b ) Y=F(w*X+b) Y=F(wX+b)这样的运算得到的。需要一次乘法,一次加法,一次非线性变换。下面结合电路具体阐述。

1.**函数(非线性部分)

模拟分立器件搭建多层感知机(MLP)(应用拟合回归)
模拟分立器件搭建多层感知机(MLP)(应用拟合回归)

模电知识在运放那一章节里,当我们把反向比例放大器的反馈电阻变成二极管时,我们得到了对数运算电路 ,(实际上利用了二极管的指数的特性,通过运放由电压控制输入二极管的电流,导致输出的电压与控制电流的输入电压呈现对数关系)当把二极管反接得到了负对数特性,两者输出叠加得到如图的非线性**函数。再由线性比例放大得到合适的**区间。(尽量落在-1到1,便于软件归一化)
在实际电路中,我们利用两个三级管(PNP与NPN)的二极管接法代替,基级的偏置可以改变**函数陡峭程度。由反向环节可以由正**变成负**
2.乘法与加法
模拟分立器件搭建多层感知机(MLP)(应用拟合回归)
有了运算放大器,乘法与加法是一个很自然的表达方法。加法是由运放自然的加法功能实现。而乘法,立定**函数的输入电阻为1,是可以通过改变输入端电阻大小改变输入电流的大小。实现权值的乘法。

举个例子输入为1V,标定为1的输入电阻为100K(则输入电流为0.01mA为1),当权值为五则我们希望输入的电流为0.05mA那我们只需将100K改为20K,同理偏置可以在输入端加正负1V而后通过改变电位器进而改变偏置电流。

软件训练

软件部分由Python语言编写,训练过程注意限定权值为正,由于我并没有参与编写,由我的同学编写的训练代码。感兴趣的可以私我。
软件部分分成两部分,第一部分,由电路这边给出**函数的模型(实测),再由CPU拟合出可供使用**函数模型,和差分模型。将**模型,和样本集输入输出均归一到-1~1后,导入进入神经网络进行训练,得到权值和偏置,再求导数标定得到电阻值。

电路实物选型及制版

选型:运放采用OPA180 三极管分别BF550 2sc4713K

1.仿真电路(Multisim14.02)
模拟分立器件搭建多层感知机(MLP)(应用拟合回归)
2.电路仿真结果(从上到下分别是散点回归,标准函数拟合)

模拟分立器件搭建多层感知机(MLP)(应用拟合回归)
模拟分立器件搭建多层感知机(MLP)(应用拟合回归)
模拟分立器件搭建多层感知机(MLP)(应用拟合回归)
模拟分立器件搭建多层感知机(MLP)(应用拟合回归)
注:在仿真层面就出现了肉眼可见的误差,由于网络大小太小,能力确实有限,实物电路实现就会更为困难。

3.PCB制版
模拟分立器件搭建多层感知机(MLP)(应用拟合回归)

实物电路结果以及误差分析(以Chwirut1数据集为例)

取测试集 输入电压-1~1V 0.1V的步进。

RMSE=0.82% 模拟分立器件搭建多层感知机(MLP)(应用拟合回归)这里取的是最佳的测试结果,笔者对其他样本测试的时候发现噪声来源于第三层线性环节,因为相对于**函数陡峭的多,因此会放大噪声。 总结:1.曲线本身 平缓 变化相对简单(单调 凹凸性) 2.加法网络(输出层)
权值小 节点输出落于平缓区,权值<5结果较好。