- AI安全之對(duì)抗樣本入門
- 兜哥編著
- 1640字
- 2019-07-11 18:32:00
1.1.2 定義網(wǎng)絡(luò)結(jié)構(gòu)
一般認(rèn)為,深度學(xué)習(xí)訓(xùn)練好的模型包括兩部分,一個(gè)是對(duì)網(wǎng)絡(luò)結(jié)構(gòu)的描述,或者稱為對(duì)網(wǎng)絡(luò)結(jié)構(gòu)的定義;另外一個(gè)是每層網(wǎng)絡(luò)的具體參數(shù)值,這兩部分加起來才是一個(gè)完整的深度學(xué)習(xí)模型。完成數(shù)據(jù)預(yù)處理后,就需要定義網(wǎng)絡(luò)結(jié)構(gòu),或者說對(duì)我們的問題進(jìn)行數(shù)學(xué)建模。
假設(shè)可以通過一條直線,把黑客和正常用戶區(qū)分開,即我們認(rèn)為這個(gè)二分類問題是線性問題,如圖1-1所示。設(shè)特征向量為x,對(duì)應(yīng)的標(biāo)簽為y,使用一個(gè)線性函數(shù)定義整個(gè)網(wǎng)絡(luò):
y=w*x+b
其中w和b就是模型的參數(shù),訓(xùn)練模型的過程就是迭代求解w和b的過程,通常x是一個(gè)多維向量,所以w和b通常也是多維向量。當(dāng)完成了網(wǎng)絡(luò)的定義后,輸入x就可以獲得確定的y,這一過程稱為前向計(jì)算過程,或者稱為前向傳播。面對(duì)更加復(fù)雜的問題,需要使用更加復(fù)雜的層來定義網(wǎng)絡(luò)。定義網(wǎng)絡(luò)時(shí)的常用層包括:Dense層、Activation層、Dropout層、Flatten層、Reshape層和Permute層等。

圖1-1 區(qū)分正常用戶和黑客的二分類問題
1.Dense層
Dense層是最常見的網(wǎng)絡(luò)層,用于構(gòu)建一個(gè)全連接。一個(gè)典型的全連接結(jié)構(gòu)由輸入、求和、激活、權(quán)重矩陣、偏置和輸出組成,如圖1-2所示,訓(xùn)練的過程就是不斷獲得最優(yōu)的權(quán)重矩陣和偏置(bias)的過程。

圖1-2 全連接結(jié)構(gòu)示意圖
了解了全連接的結(jié)構(gòu)后,也不難理解創(chuàng)建Dense層的幾個(gè)參數(shù)了,例如:
keras.layers.core.Dense(units, activation=None, use_bias=True, kernel_initializer='glorot_uniform', bias_initializer='zeros', kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, bias_constraint=None)
其中比較重要的幾個(gè)參數(shù)含義如下。
·units表示隱藏層節(jié)點(diǎn)數(shù)。
·activation(激活函數(shù))詳細(xì)介紹請(qǐng)參見Activation層的相關(guān)內(nèi)容。
·use_bias表示是否使用偏置。
2.Activation層
Actiration層對(duì)一個(gè)層的輸出施加激活函數(shù),常見的激活函數(shù)包括以下幾種。
(1)relu
relu函數(shù)當(dāng)輸入小于0時(shí)為0,當(dāng)輸入大于0時(shí)等于輸入。使用代碼繪制relu的圖像,獲得圖像(見圖1-3)。
def relu(x): if x > 0: return x else: return 0 def func4(): x = np.arange(-5.0, 5.0, 0.02) y=[] for i in x: yi=relu(i) y.append(yi) plt.xlabel('x') plt.ylabel('y relu(x)') plt.title('relu') plt.plot(x, y) plt.show()

圖1-3 relu函數(shù)
(2)leakyrelu
leakyrelu函數(shù)是從relu函數(shù)發(fā)展而來的,當(dāng)輸入小于0時(shí)為輸入乘以一個(gè)很小的系數(shù),比如0.1,當(dāng)輸入大于0時(shí)等于輸入。使用代碼繪制leakyrelu的圖像,獲得圖像(見圖1-4)。
def leakyrelu(x): if x > 0: return x else: return x*0.1 def func5(): x = np.arange(-5.0, 5.0, 0.02) y=[] for i in x: yi=leakyrelu(i) y.append(yi) plt.xlabel('x') plt.ylabel('y leakyrelu(x)') plt.title('leakyrelu') plt.plot(x, y) plt.show()

圖1-4 leakyrelu圖像
(3)tanh
tanh也稱為雙切正切函數(shù),取值范圍為[–1,1]。tanh在特征相差明顯時(shí)的效果會(huì)很好,在循環(huán)過程中會(huì)不斷擴(kuò)大特征效果。tanh的定義如下:

使用代碼繪制tanh的圖像,獲得圖像(見圖1-5)。
x = np.arange(-5.0, 5.0, 0.02) y=(np.exp(x)-np.exp(-x))/(np.exp(x)+np.exp(-x)) plt.xlabel('x') plt.ylabel('y tanh(x)') plt.title('tanh') plt.plot(x, y) plt.show()

圖1-5 tanh圖像
(4)sigmoid
sigmoid可以將一個(gè)實(shí)數(shù)映射到(0,1)的區(qū)間,可以用來做二分類。sigmoid的定義如下:

使用代碼繪制sigmoid的圖像,獲得圖像(見圖1-6)。

圖1-6 sigmoid圖像
x = np.arange(-5.0, 5.0, 0.02) y=1/(1+np.exp(-x)) plt.xlabel('x') plt.ylabel('y sigmoid(x)') plt.title('sigmoid') plt.plot(x, y) plt.show()
Activation層可以單獨(dú)使用,也可以作為其他層的參數(shù),比如創(chuàng)建一個(gè)輸入大小為784,節(jié)點(diǎn)數(shù)為32,激活函數(shù)為relu的全連接層的代碼為:
model.add(Dense(32, input_shape=(784,))) model.add(Activation('relu'))
等價(jià)于下列代碼:
model.add(Dense(32, activation='relu',input_shape=(784,)))
3.Dropout層
在深度學(xué)習(xí)中,動(dòng)輒幾萬的參數(shù)需要訓(xùn)練,非常容易造成過擬合,通常為了避免過擬合,會(huì)在每次訓(xùn)練的時(shí)候隨機(jī)選擇一定的節(jié)點(diǎn),使它們臨時(shí)失效,形象的比喻是,好比每次識(shí)別圖像的時(shí)候,隨機(jī)地?fù)踝∫恍┫袼兀趽踹m當(dāng)比例的像素不會(huì)影響圖像的識(shí)別,但是卻可以比較有效地抑制過擬合。Dropout層的定義如下:
keras.layers.core.Dropout(rate, noise_shape=None, seed=None)
其中,常用的參數(shù)就是rate,表示臨時(shí)失效的節(jié)點(diǎn)的比例,經(jīng)驗(yàn)值為0.2~0.4比較合適。
4.Embedding層
Embedding層負(fù)責(zé)將輸入的向量按照一定的規(guī)則改變維度,有點(diǎn)類似于Word2Vec的處理方式,把詞可以映射到一個(gè)指定維度的向量中,其函數(shù)定義如下:
keras.layers.Embedding(input_dim, output_dim, embeddings_initializer='uniform', embeddings_regularizer=None, activity_regularizer=None, embeddings_constraint=None, mask_zero=False, input_length=None)
其中比較重要的參數(shù)為:
·input_dim:輸入的向量的維度。
·output_dim:輸出的向量的維度。
·embeddings_initializer:初始化的方式,通常使用glorot_normal或者uniform。
5.Flatten層
Flatten層用來將輸入壓平,即把多維的輸入一維化。
6.Permute層
Permute層將輸入的維度按照給定模式進(jìn)行重排。一個(gè)典型場(chǎng)景就是在Keras處理圖像數(shù)據(jù)時(shí),需要根據(jù)底層是TensorFlow還是Theano調(diào)整像素的順序。在TensorFlow中圖像保存的順序是(width,height,channels)而在Theano中則為(channels,width,height),比如MNIST圖像,在TensorFlow中的大小就是(28,28,1),而在Theano中是(1,28,28)。示例代碼如下:
if K.image_dim_ordering() == 'tf': # (width, height, channels) model.add(Permute((2, 3, 1), input_shape=input_shape)) elif K.image_dim_ordering() == 'th': # (channels, width, height) model.add(Permute((1, 2, 3), input_shape=input_shape)) else: raise RuntimeError('Unknown image_dim_ordering.')
7.Reshape層
Reshape層用于將輸入shape轉(zhuǎn)換為特定的shape。函數(shù)定義如下代碼所示:
keras.layers.core.Reshape(target_shape)
其中target_shape為希望轉(zhuǎn)換成的形狀,比如圖片的大小為(1,28,28,1),但是網(wǎng)絡(luò)的輸入大小為(1,784)時(shí)就需要使用Reshape層。
- 網(wǎng)頁編程技術(shù)
- R Machine Learning By Example
- Hands-On Neural Networks with Keras
- 可編程控制器技術(shù)應(yīng)用(西門子S7系列)
- 中國戰(zhàn)略性新興產(chǎn)業(yè)研究與發(fā)展·智能制造
- CompTIA Network+ Certification Guide
- CompTIA Linux+ Certification Guide
- 教育機(jī)器人的風(fēng)口:全球發(fā)展現(xiàn)狀及趨勢(shì)
- Dreamweaver CS6中文版多功能教材
- 工業(yè)機(jī)器人操作
- 大數(shù)據(jù)時(shí)代的調(diào)查師
- Mastering DynamoDB
- 天才與算法:人腦與AI的數(shù)學(xué)思維
- 人工智能基礎(chǔ)
- VMware vSphere 6.5 Cookbook(Third Edition)