導航:首頁 > 網路問題 > 神經網路中樣本是什麼

神經網路中樣本是什麼

發布時間:2023-09-24 09:27:43

❶ BP神經網路的mu參數是學習率么訓練結果val fail中的validation check=6什麼意思

神經網路的樣本若輸入網路,默認情況下會將樣本隨即分為3類:訓練樣本,確認樣本和測試樣本。確認檢查值默認是6,它的意思是指隨著網路利用訓練樣本進行訓練的過程中,確認樣本的誤差曲線連續6次迭代不在下降。這時訓練終止(這只是訓練終止條件之一,滿足任一終止條件,訓練過程都將終止)深層含義你可以這樣理解,如果隨著網路的訓練,確認樣本的誤差已經基本不在減小,甚至增大,那麼就沒有必要再去訓練網路了,因為繼續訓練下去的話,在利用測試樣本進行測試網路的話,測試樣本的誤差將同樣不會有所改善,甚至會出現過度擬合的現象。validation checks已經達到設置的值了,所以停止訓練了,如果網路在連續max_fail epochs後不能提高網路性能,就停止訓練。
有三種方法解決這個問題:
1 提高validation checks的數值,比如設置net.trainParam.max_fail = 200;其實這等於自己糊弄自己嚴重不推薦,出現停止訓練,就是因為被訓練的網路已經過擬合,停下來是應該的。但6的確有點小,建議改成10到20之間的數
2 修改被訓練的網路,比如說再加一個隱藏層試試
3 如果是數據太相近的問題,試試選擇用divideind

❷ 神經網路中的對抗攻擊與對抗樣本

對抗攻擊

對抗攻擊論文參考:
《Intriguing properties of neural networks》
《神經網路有趣的特性》

《Threat of Adversarial Attacks on Deep Learning in Computer Vision: A Survey》,以下簡稱『Survey』。

圖片做適當修改後能欺騙深度學習模型的可能性

1.舉例理解:

左邊是一張能夠被GoogLeNet正常分類為熊貓的圖片,在添加一定的噪音後變成右圖,在人的肉眼看來,它還是熊貓,但GoogLeNet會判定為長臂猿。這種被修改後人類無法明顯察覺,卻被機器識別錯誤的數據即為 對抗樣本 ,而這整個過程就可以理解為 對抗攻擊

2.數學理解:
神經網路中每層神經元的輸入 a = g(Wx+b),其中 g 為激活函數,W 為權重參數,x 為上一層的樣本數據,b 為偏置參數,那麼從拓撲學角度來看,在一個二維平面上,這個過程相當於哪幾個步驟呢?
(1)一次使用權重參數矩陣 W 的線性變換
(2)一次使用偏執向量 b 的移動
(3)一次應用非線性激活函數 g 的變換

二維平面 ,其實是將整個平面進行了 旋轉、移動和拉伸 三步。

分類問題

簡單分類問題:通過較少幾次變換將問題轉換為一條直線可分割的空間。
既是一層神經網路就可以完成分類,通過變換空間布局,最終通過一條直線完成分類。

舉例:

簡單轉換ing........

轉換結果看下圖

復雜分類問題:通過多幾次的轉換完成將問題轉換為一條直線可分割的空間。
就是多層神經網路完成分類,通過變換空間布局,最終通過一條直線完成分類。

舉例:

動態多步轉換

以上是從低維度理解神經網路的訓練,其中也有難以拉伸的例外,下圖所示的圓套圓的情況,就是難以在二維空間將其拉伸到理想的位置的例子。

但,增加神經元,可以在 三維空間 中輕松將其分離。

看!

歸納 同樣對於復雜問題可以通過,增加神經元在高維度通過更長且復雜的方式解決。

但是例如兩個相互套起來的環,按照推測需要在四維空間中才能完全分開,然而我們難以想像四維空間,在現實世界的數據集中,這種死結或者纏繞問題可能會更復雜。

對於神經網路來,可以選擇 將打成死結的數據盡可能拉伸開,而不是完全解開 ,如下圖,對於分類問題來說,已經具有較高的准確率和召回率。

部分情況下,為了更精確地分類,較寬的神經網路可能相對深度來說更重要。

綜上所述
1. 神經網路中包含語義信息的不在每個獨立的神經單元,而是整個空間。 神經網路在最後一層能將樣本中諸多變化的因子理清楚並理解其語義,並不是因為某個獨立神經元中包含了什麼特定的語義,而是 對整個空間進行變換後從最終的表徵層中學到的 ,經過學習,神經網路會 放大某些相關因子,同時縮小某些無關因子

2. 神經網路學習到的輸入到輸出的映射在很大程度上是不連續的。 就像上面圖中為了解開一個死結所做的拉伸結果一樣, 在人看來,在拉伸距離較大的地方我們可以認為這種映射是連續的, 然而 對於仍然纏繞在一起的部分,之前可以用來劃分界限的直線或者超平面已經無法連續
通過仔細觀察可以區分出來,但是上文只是一個簡單的例子,現實世界中的真實數據較為復雜,對於肉眼來說可能很難分清楚纏繞在一起的部分。對於神經網路來說, 對抗樣本已經嚴重的跨過了用於分類的界限 ,而對於肉眼其實還 看不出來它有移動。

()線性特性的攻擊行為()和()高效製造對抗樣本的方法()

參考論文:
《Explaining and harnessing adversarial examples》
《對抗性例子的解讀和掌握》

深度神經網路在高緯空間中的線性特性已經足以產生這種攻擊行為 ,並提出了一種 更高效生成對抗樣本的方法 ,接下來我們就簡單分析一下這一理論和方法。

目前神經網路為了提高訓練效率所使用的激活函數在局部都過於線性。
例如:

類比先前舉出的拓撲學例子,在 最後的表徵層 都是 通過直線或超平面完成的分類 ,在線性的假設下,暫且不通過二維或三維空間來理解,先從一個簡單的數學公式角度開始。

數學解釋

公式內容解釋:
w 是訓練好的參數向量
x 表示真實樣本數據向量
η 表示給圖像加入的噪音向量
x ~表示加入噪音後新生成的樣本

當加入足夠小的 η 時,肉眼無法區分出 x 的變化,直觀感覺上左邊的式子可能也不會變化很大。
事實上 ,然而 η 當的方向與 w 完全一致的時候,即使很小,也會使整個激活值變化很大。
假設證明:
如果 w 是一個 n 維向量,而其權值的平均大小為 m,那麼激活值將會增加 nm。可見,在一個肉眼幾乎無法差覺的擾動干擾下,對神經網路最終激活層的計算會產生巨大的干擾,從而迷惑神經網路訓練出來的模型。

尋找正確方向
當 η 與 w 的方向一致時會使激活值最大,那麼,如何找到這個正確的方向呢?

結論,那就是損失函數在待構造樣本上的梯度方向,即下面的式子。
ε 是一個調節系數
sign() 是一個符號函數,代表的意思也很簡單,就是取一個值的符號
(當值大於 0 時取 1,當值等於 0 時取 0,當值小於 0 時取 -1)
▽ 表示求 x 的梯度,可以理解為偏導,
J 是訓練模型的損失函數。

結論的由來
在正常的神經網路模型訓練過程中,有一個過程叫反向傳播,就是對參數求偏導,然後將參數更新,我們結合下面這張圖看一下。

假設圖中的函數即為 損失函數 ,為了使損失函數降到最低,我們會根據當前值的梯度去調整。
當梯度小於 0 的時候我們可以看出,當前值需要右移。
而當梯度大於 0 的時候,當前值需要左移。
這個過程實際上就是用 θ 減去 θ。擴展到損失函數 J(θ, x, y) 中,θ 即為 我們要調整的參數 ,因此在樣本 x 和 y 不改變的情況下,我們會**不斷去調整參數 θ **以尋求局部最優解,即 θ = θ - θ 。

生成對抗樣本,也可以採用類似的方法,那就是 固定參數 θ,調整 x 同時使損失函數增大 ,而不是變小,此時就應該讓 x 往相反的方向走,即 x = x + x ,這樣是不是很容易可以理解上面 η 的定義呢?在實踐中,我們還需要通過 ε 這個參數來 調節噪音的大小 ,這種方法相比之前提到的優化方法非常高效,基本只需要一次計算就可以找到對抗樣本,因此作者將這種方法叫做 快速梯度符號法 (Fast Gradient Sign Method,FGSM)。總結一下FGSM,這種方法通過替換目標值 y 就可以 讓攻擊樣本朝著指定的分類目標走 ,即,可以做任意目標的欺騙。

將線性假設簡化到二維空間,我們要求的 η 其方向正好就接近於參數 w 的方向,不再展開說明,有興趣的讀者可以自行畫一畫。

建立在一個高維空間線性的假設或猜測前提下,需要 實驗 支撐,根據下列圖片分析展開。

圖片解釋

這張圖是對數據集CIFAR-10的分類器的決策邊界示意圖。
其中每個小格子代表的是不同的CIFAR-10樣本,
每個小格子中:
橫向從左往右代表的是FGSM演算法中的梯度方向,
縱向代表的是FGSM梯度方向的正交方向,
白色表示模型能分類正確的情況
彩色代表預測出錯的情況
不同的顏色代表不同的錯誤預測分類。
可以看出,在出錯的區域都程線性分布,另外,如果橫軸的方向走的不夠遠,即便再往其他方向走都無法使模型出錯,而一單進入這個區域,就會出現大量的對抗樣本。而在隨機找到的對抗樣本中,這種分布也是很隨機的,甚至很難找到,見下圖。

從實驗結果表明
高維空間中的線性假設也是合理的

舉例
一匹叫做 Clever Hans 的馬,剛出現的時候人們認為這匹馬會做算術,但實際上它只是會閱讀人的表情,當它點馬蹄的次數接近正確答案時,人們的表情會更興奮,它就知道該這個時候停止了。

隱喻神經網路,一個測試效果良好的分類器,其實並不像人類一樣學習到了所分類樣本的真正底層概念,只不過剛好構建了一個在訓練數據上運行相當良好的模型,所以,你以為你以為的就是你以為的嗎?

分類器能夠在訓練集的不同子集上訓練時獲得大致相同的分類權重,因為機器學習演算法能夠泛化, 基礎分類權重的穩定性反過來又會導致對抗性樣本的穩定性。因此, 對抗攻擊可以認為是存在於任何神經網路模型。

以上是論文二的線性特性的攻擊行為

高效製造對抗樣本的方法

目前來看還沒有能夠完全抵抗這種攻擊的方法,其實結合攻擊的原理也不難看出,即便分類器做得再好,總能使一個樣本用最小的干擾走到錯誤的分類區域,我們能做的更多是如何構造魯棒性更強的模型,同時也保持對這個領域的關注。『Survey』(注意第一篇論文的引用有注釋)中總結的目前抵禦攻擊的辦法可以分為三大類:

1.修改訓練樣本 ———— 通過添加更多的對抗樣本到訓練集中可以有效避免一部分攻擊 ,但這更像是一種無奈的做法, 當擴大樣本集的時候,其實分類邊界有可能也在隨之擴大

2.修改訓練網路 ,這類方法會對訓練網路做出一定調整,其中有一種方式是模擬生物學 在最後一層使用更加非線性的激活函數 ,但這種方式又會 導致訓練效率和效果下降 。修改訓練網路的方法分為 完全抵抗 僅檢測 兩種方式,完全抵抗其實就是讓模型能將對抗樣本識別為正確的分類,而僅檢測是為了發現這種攻擊樣本,從而拒絕服務。

3.附加網路 ,這種方式是在 不改變原有模型的情況下使用額外的網路進行輔助 ,這樣可以使原有網路保持不變,其中最有效的一種方式是生成式對抗網路——GAN。同樣的,這種方式也分為 完全抵抗 僅檢測 兩種方式。

總結一下
定義:
對抗樣本:是指在數據集中通過故意添加細微的干擾所形成的輸入樣本,會導致模型以高置信度給出一個錯誤的輸出。
原因分析:
對抗樣本出現的主要原因之一是過度線性, 神經網路主要是基於線性塊構建的,實現的整體函數被證明是高度線性的,如果一個線性函數具有許多輸入,那麼它的值可以非常迅速地改變。

參考:

❸ BP神經網路的訓練集需要大樣本嗎一般樣本個數為多少

BP神經網路的訓練集需要大樣本嗎?一般樣本個數為多少?
BP神經網路樣本數有什麼影響
學習神經網路這段時間,有一個疑問,BP神經網路中訓練的次數指的網路的迭代次數,如果有a個樣本,每個樣本訓練次數n,則網路一共迭代an次,在n>>a 情況下 , 網路在不停的調整權值,減小誤差,跟樣本數似乎關系不大。而且,a大了的話訓練時間必然會變長。
換一種說法,將你的數據集看成一個固定值, 那麼樣本集與測試集 也可以按照某種規格確定下來如7:3 所以如何看待 樣本集的多少與訓練結果呢? 或者說怎麼使你的網路更加穩定,更加符合你的所需 。

我嘗試從之前的一個例子中看下區別

如何用70行Java代碼實現深度神經網路演算法

作者其實是實現了一個BP神經網路 ,不多說,看最後的例子

一個運用神經網路的例子
最後我們找個簡單例子來看看神經網路神奇的效果。為了方便觀察數據分布,我們選用一個二維坐標的數據,下面共有4個數據,方塊代表數據的類型為1,三角代表數據的類型為0,可以看到屬於方塊類型的數據有(1,2)和(2,1),屬於三角類型的數據有(1,1),(2,2),現在問題是需要在平面上將4個數據分成1和0兩類,並以此來預測新的數據的類型。


圖片描述

我們可以運用邏輯回歸演算法來解決上面的分類問題,但是邏輯回歸得到一個線性的直線做為分界線,可以看到上面的紅線無論怎麼擺放,總是有一個樣本被錯誤地劃分到不同類型中,所以對於上面的數據,僅僅一條直線不能很正確地劃分他們的分類,如果我們運用神經網路演算法,可以得到下圖的分類效果,相當於多條直線求並集來劃分空間,這樣准確性更高。

圖片描述

簡單粗暴,用作者的代碼運行後 訓練5000次 。根據訓練結果來預測一條新數據的分類(3,1)



預測值 (3,1)的結果跟(1,2)(2,1)屬於一類 屬於正方形

這時如果我們去掉 2個樣本,則樣本輸入變成如下

//設置樣本數據,對應上面的4個二維坐標數據
double[][] data = new double[][]{{1,2},{2,2}};
//設置目標數據,對應4個坐標數據的分類
double[][] target = new double[][]{{1,0},{0,1}};
1
2
3
4
1
2
3
4




則(3,1)結果變成了三角形,

如果你選前兩個點 你會發現直接一條中間線就可以區分 這時候的你的結果跟之前4個點時有區別 so 你得增加樣本 直到這些樣本按照你所想要的方式分類 ,所以樣本的多少 重要性體現在,樣本得能反映所有的特徵值(也就是輸入值) ,樣本多少或者特徵(本例子指點的位置特徵)決定的你的網路的訓練結果,!!!這是 我們反推出來的結果 。這里距離深度學習好像近了一步。

另外,這個70行代碼的神經網路沒有保存你訓練的網路 ,所以你每次運行都是重新訓練的網路。其實,在你訓練過後 權值已經確定了下來,我們確定網路也就是根據權值,so只要把訓練後的權值保存下來,將需要分類的數據按照這種權值帶入網路,即可得到輸出值,也就是一旦網路確定, 權值也就確定,一個輸入對應一個固定的輸出,不會再次改變!個人見解。

最後附上作者的源碼,作者的文章見開頭鏈接
下面的實現程序BpDeep.java可以直接拿去使用,

import java.util.Random;
public class BpDeep{
public double[][] layer;//神經網路各層節點
public double[][] layerErr;//神經網路各節點誤差
public double[][][] layer_weight;//各層節點權重
public double[][][] layer_weight_delta;//各層節點權重動量
public double mobp;//動量系數
public double rate;//學習系數

public BpDeep(int[] layernum, double rate, double mobp){
this.mobp = mobp;
this.rate = rate;
layer = new double[layernum.length][];
layerErr = new double[layernum.length][];
layer_weight = new double[layernum.length][][];
layer_weight_delta = new double[layernum.length][][];
Random random = new Random();
for(int l=0;l<layernum.length;l++){
layer[l]=new double[layernum[l]];
layerErr[l]=new double[layernum[l]];
if(l+1<layernum.length){
layer_weight[l]=new double[layernum[l]+1][layernum[l+1]];
layer_weight_delta[l]=new double[layernum[l]+1][layernum[l+1]];
for(int j=0;j<layernum[l]+1;j++)
for(int i=0;i<layernum[l+1];i++)
layer_weight[l][j][i]=random.nextDouble();//隨機初始化權重
}
}
}
//逐層向前計算輸出
public double[] computeOut(double[] in){
for(int l=1;l<layer.length;l++){
for(int j=0;j<layer[l].length;j++){
double z=layer_weight[l-1][layer[l-1].length][j];
for(int i=0;i<layer[l-1].length;i++){
layer[l-1][i]=l==1?in[i]:layer[l-1][i];
z+=layer_weight[l-1][i][j]*layer[l-1][i];
}
layer[l][j]=1/(1+Math.exp(-z));
}
}
return layer[layer.length-1];
}
//逐層反向計算誤差並修改權重
public void updateWeight(double[] tar){
int l=layer.length-1;
for(int j=0;j<layerErr[l].length;j++)
layerErr[l][j]=layer[l][j]*(1-layer[l][j])*(tar[j]-layer[l][j]);

while(l-->0){
for(int j=0;j<layerErr[l].length;j++){
double z = 0.0;
for(int i=0;i<layerErr[l+1].length;i++){
z=z+l>0?layerErr[l+1][i]*layer_weight[l][j][i]:0;
layer_weight_delta[l][j][i]= mobp*layer_weight_delta[l][j][i]+rate*layerErr[l+1][i]*layer[l][j];//隱含層動量調整
layer_weight[l][j][i]+=layer_weight_delta[l][j][i];//隱含層權重調整
if(j==layerErr[l].length-1){
layer_weight_delta[l][j+1][i]= mobp*layer_weight_delta[l][j+1][i]+rate*layerErr[l+1][i];//截距動量調整
layer_weight[l][j+1][i]+=layer_weight_delta[l][j+1][i];//截距權重調整
}
}
layerErr[l][j]=z*layer[l][j]*(1-layer[l][j]);//記錄誤差
}
}
}

public void train(double[] in, double[] tar){
double[] out = computeOut(in);
updateWeight(tar);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
下面是這個測試程序BpDeepTest.java的源碼:

import java.util.Arrays;
public class BpDeepTest{
public static void main(String[] args){
//初始化神經網路的基本配置
//第一個參數是一個整型數組,表示神經網路的層數和每層節點數,比如{3,10,10,10,10,2}表示輸入層是3個節點,輸出層是2個節點,中間有4層隱含層,每層10個節點
//第二個參數是學習步長,第三個參數是動量系數
BpDeep bp = new BpDeep(new int[]{2,10,2}, 0.15, 0.8);

//設置樣本數據,對應上面的4個二維坐標數據
double[][] data = new double[][]{{1,2},{2,2},{1,1},{2,1}};
//設置目標數據,對應4個坐標數據的分類
double[][] target = new double[][]{{1,0},{0,1},{0,1},{1,0}};

//迭代訓練5000次
for(int n=0;n<5000;n++)
for(int i=0;i<data.length;i++)
bp.train(data[i], target[i]);

//根據訓練結果來檢驗樣本數據
for(int j=0;j<data.length;j++){
double[] result = bp.computeOut(data[j]);
System.out.println(Arrays.toString(data[j])+":"+Arrays.toString(result));
}

//根據訓練結果來預測一條新數據的分類
double[] x = new double[]{3,1};
double[] result = bp.computeOut(x);
System.out.println(Arrays.toString(x)+":"+Arrays.toString(result));
}
}

❹ 什麼是神經網路中的訓練樣本

指對人工神經網路訓練。向網路足夠多的樣本,通過一定演算法調整網路的結構(主要是調節權值),使網路的輸出與預期值相符,這樣的過程就是神經網路訓練。根據學習環境中教師信號的差異,神經網路訓練大致可分為二分割學習、輸出值學習和無教師學習三種。

閱讀全文

與神經網路中樣本是什麼相關的資料

熱點內容
移動網路線交換機 瀏覽:655
千兆網路用300兆路由器 瀏覽:858
網路盒子小米三增強版多少錢 瀏覽:121
手機網路增強器wifi 瀏覽:900
cctv網路春晚在哪裡播出 瀏覽:158
員工網路監控軟體 瀏覽:350
網路安全威脅電子商務事例 瀏覽:280
電腦光纖網路掉線 瀏覽:396
4g網路用多少mb 瀏覽:909
wifi網路連接斷開怎麼弄 瀏覽:306
派出所有權利查網路社交軟體嗎 瀏覽:503
手機屏幕下滑鍵關閉網路不管事嗎 瀏覽:669
安裝下載河南移動網路 瀏覽:218
老是玩網路游戲會有哪些壞處 瀏覽:759
ab在網路中什麼意思 瀏覽:886
電腦無線網路無法連接怎麼操作 瀏覽:349
安廣網路用什麼路由器 瀏覽:688
上海科技館的網路密碼是多少 瀏覽:297
ip地址顯示用哪裡的網路 瀏覽:323
昆明網路營銷培訓 瀏覽:110

友情鏈接