深度学习之 RBF神经网络
RBF神經(jīng)網(wǎng)絡(luò)通常只有三層,即輸入層、中間層和輸出層。其中中間層主要計(jì)算輸入x和樣本矢量c(記憶樣本)之間的歐式距離的Radial Basis Function (RBF)的值,輸出層對(duì)其做一個(gè)線性的組合。
徑向基函數(shù):
RBF神經(jīng)網(wǎng)絡(luò)的訓(xùn)練可以分為兩個(gè)階段:
第一階段為無監(jiān)督學(xué)習(xí),從樣本數(shù)據(jù)中選擇記憶樣本/中心點(diǎn);可以使用聚類算法,也可以選擇隨機(jī)給定的方式。
?
第二階段為監(jiān)督學(xué)習(xí),主要計(jì)算樣本經(jīng)過RBF轉(zhuǎn)換后,和輸出之間的關(guān)系/權(quán)重;可以使用BP算法計(jì)算、也可以使用簡單的數(shù)學(xué)公式計(jì)算。
?
1. 隨機(jī)初始化中心點(diǎn)
2. 計(jì)算RBF中的激活函數(shù)值,每個(gè)中心點(diǎn)到樣本的距離
3. 計(jì)算權(quán)重,原函數(shù):Y=GW
4. W = G^-1Y
RBF網(wǎng)絡(luò)能夠逼近任意非線性的函數(shù)(因?yàn)槭褂玫氖且粋€(gè)局部的激活函數(shù)。在中心點(diǎn)附近有最大的反應(yīng);越接近中心點(diǎn)則反應(yīng)最大,遠(yuǎn)離反應(yīng)成指數(shù)遞減;就相當(dāng)于每個(gè)神經(jīng)元都對(duì)應(yīng)不同的感知域)。
可以處理系統(tǒng)內(nèi)難以解析的規(guī)律性,具有很好的泛化能力,并且具有較快的學(xué)習(xí)速度。
有很快的學(xué)習(xí)收斂速度,已成功應(yīng)用于非線性函數(shù)逼近、時(shí)間序列分析、數(shù)據(jù)分類、模式識(shí)別、信息處理、圖像處理、系統(tǒng)建模、控制和故障診斷等。
當(dāng)網(wǎng)絡(luò)的一個(gè)或多個(gè)可調(diào)參數(shù)(權(quán)值或閾值)對(duì)任何一個(gè)輸出都有影響時(shí),這樣的網(wǎng)絡(luò)稱為全局逼近網(wǎng)絡(luò)。由于對(duì)于每次輸入,網(wǎng)絡(luò)上的每一個(gè)權(quán)值都要調(diào)整,從而導(dǎo)致全局逼近網(wǎng)絡(luò)的學(xué)習(xí)速度很慢,比如BP網(wǎng)絡(luò)。
如果對(duì)于輸入空間的某個(gè)局部區(qū)域只有少數(shù)幾個(gè)連接權(quán)值影響輸出,則該網(wǎng)絡(luò)稱為局部逼近網(wǎng)絡(luò),比如RBF網(wǎng)絡(luò)。
RBF和BP神經(jīng)網(wǎng)絡(luò)的對(duì)比
BP神經(jīng)網(wǎng)絡(luò)(使用Sigmoid激活函數(shù))是全局逼近;RBF神經(jīng)網(wǎng)絡(luò)(使用徑向基函數(shù)作為激活函數(shù))是局部逼近;
相同點(diǎn):
- 1. RBF神經(jīng)網(wǎng)絡(luò)中對(duì)于權(quán)重的求解也可以使用BP算法求解。
不同點(diǎn):
- 1. 中間神經(jīng)元類型不同(RBF:徑向基函數(shù);BP:Sigmoid函數(shù))
- 2. 網(wǎng)絡(luò)層次數(shù)量不同(RBF:3層;BP:不限制)
- 3. 運(yùn)行速度的區(qū)別(RBF:快;BP:慢)
簡單的RBF神經(jīng)網(wǎng)絡(luò)代碼實(shí)現(xiàn)
# -*- coding:utf-8 -*- """@Time : @Author: Feng Lepeng@File : RBF_demo.py@Desc : """ import numpy as np import matplotlib as mpl from matplotlib import pyplot as plt from scipy.linalg import norm, pinv # norm 求模,pinv 求逆mpl.rcParams["font.sans-serif"] = ["SimHei"] np.random.seed(28)class RBF:"""RBF徑向基神經(jīng)網(wǎng)絡(luò)"""def __init__(self, input_dim, num_centers, out_dim):"""初始化函數(shù):param input_dim: 輸入維度數(shù)目:param num_centers: 中間的核數(shù)目:param out_dim:輸出維度數(shù)目"""self.input_dim = input_dimself.out_dim = out_dimself.num_centers = num_centersself.centers = [np.random.uniform(-1, 1, input_dim) for i in range(num_centers)]self.beta = 8self.W = np.random.random((self.num_centers, self.out_dim))def _basisfunc(self, c, d):return np.exp(-self.beta * norm(c - d) ** 2)def _calcAct(self, X):G = np.zeros((X.shape[0], self.num_centers), float)for ci, c in enumerate(self.centers):for xi, x in enumerate(X):G[xi, ci] = self._basisfunc(c, x)return Gdef train(self, X, Y):"""進(jìn)行模型訓(xùn)練:param X: 矩陣,x的維度必須是給定的 n * input_dim:param Y: 列的向量組合,要求維度必須是n * 1:return:"""# 隨機(jī)初始化中心點(diǎn)rnd_idx = np.random.permutation(X.shape[0])[:self.num_centers]self.centers = [X[i, :] for i in rnd_idx]# 相當(dāng)于計(jì)算RBF中的激活函數(shù)值G = self._calcAct(X)# 計(jì)算權(quán)重==> Y=GW ==> W = G^-1Yself.W = np.dot(pinv(G), Y)def test(self, X):""" x的維度必須是給定的n * input_dim"""G = self._calcAct(X)Y = np.dot(G, self.W)return Yif __name__ == '__main__':# 構(gòu)造數(shù)據(jù)n = 100x = np.linspace(-1, 1, n).reshape(n, 1)y = np.sin(3 * (x + 0.5) ** 3 - 1)# RBF神經(jīng)網(wǎng)絡(luò)rbf = RBF(1, 20, 1)rbf.train(x, y)z = rbf.test(x)plt.figure(figsize=(12, 8))plt.plot(x, y, 'ko', label="原始值")plt.plot(x, z, 'r-', linewidth=2, label="預(yù)測(cè)值")plt.legend()plt.xlim(-1.2, 1.2)plt.show()效果圖片:
?
RBF訓(xùn)練
RBF函數(shù)中心,擴(kuò)展常數(shù),輸出權(quán)值都應(yīng)該采用監(jiān)督學(xué)習(xí)算法進(jìn)行訓(xùn)練,經(jīng)歷一個(gè)誤差修正學(xué)習(xí)的過程,與BP網(wǎng)絡(luò)的學(xué)習(xí)原理一樣.同樣采用梯度下降愛法,定義目標(biāo)函數(shù)為:
ei為輸入第i個(gè)樣本時(shí)候的誤差。
這個(gè)等式輸出函數(shù)中忽略了閾值,為使目標(biāo)函數(shù)最小化,各參數(shù)的修正量應(yīng)與其梯度成正比。
總結(jié)
以上是生活随笔為你收集整理的深度学习之 RBF神经网络的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 你知道吗?世界上绝美神奇的25条路
- 下一篇: 基于单片机智能自动浇花控制系统设计(毕业