線性:當存在w
ww和b
bb使得式子
f (x
)=x⋅
w+bx
∈rdi
n,w∈
rdin
×dou
tand
b∈rd
ou
tf(x) = x \cdot w + b \quad\\ x \in \mathbb}} , w \in \mathbb \times d_ }} and \quad b \in \mathbb}}
f(x)=x
⋅w+b
x∈rd
in,
w∈rd
in×
dout
and
b∈rd
out
非線性:不滿足線性條件的,比較典型的是xor
ww 和 b
bb 的優解。但是我們的問題在大多數情況下都是非線性的, 我們往往會通過加入核函式(或啟用函式)來使得我們的模型能夠適應線性不可分的問題。
啟用函式一般同樣會選擇一些非線性函式。比較典型的有:
sigmoid(logistic)
σ (x
)=11
+e−x
\sigma(x) = \frac}
σ(x)=1
+e−x
1tanh
t an
h(x)
=e2x
−1e2
x+
1tanh(x) = \frac -1} + 1}
tanh(x
)=e2
x+1e
2x−1
relu
r el
u(x)
=max
(0,x
)=
0 \quad x < 0\\ x \quad others \end \right .
relu(x
)=ma
x(0,
x)= = relu(a(relu(xw_1 + b_1))w_2 + b_2)
mlp1−r
elu
=rel
u(a(
relu
(xw1
+b1
))w
2+b
2)深度學習有很多的損失函式,不同的應用也應該使用不同的損失函式。損失函式總的來說就是計算兩個向量的的相差程度,並將結果化為標量。常見的損失函式有:
這裡設預期輸出和分類器輸出的差值為m。
log:
l lo
g=lo
g(1+
exp(
−m))
l_ = log(1+ exp(-m))
llog=
log(
1+ex
p(−m
))logistic(也叫二元交叉熵):
l =−
yalo
gyp−
(1−y
a)lo
g(1−
yp
)l = -y_a logy_p - ( 1 - y_a) log( 1- y_p)
l=−ya
logy
p−(
1−ya
)lo
g(1−
yp)
**規則是:
p re
dict
ion=
0 \quad y_p < 0.5\\ 1 \quad y_p \ge 0.5 \end \right.
predic
tion
=}}
d(i)=∂
i∂n
實際上,我們使用鏈式傳導法則就可以一次算出所有節點的梯度值。
我們比較常用的是隨機梯度下降(sgd)。sgd的核心思想是梯度越小,下降越慢。但是這樣很容易進入區域性最優,於是sgd還引入了隨機性,從而可以跳出區域性最優的情況。
梯度消失指的是梯度變得接近0,梯度**指的是梯度變得非常高。這兩個都是嚴重的問題。在深層網路中,這兩個問題會非常嚴重。比如我在訓練googlenet的時候,就不止一次的碰到了梯度消失的問題。
可以參考**更加詳細的了解:
雖說和傳統的機器學習相比,深度學習的乙個優點就是不需要人們大量的調整引數,模型會自動的學習到一些引數。但是這不意味著深度學習不需要調參。比較常見的需要調整的超參有學習率優化演算法的引數和batch size等。
cnn,卷積神經網路
rnn,迴圈神經網路
這個要展開說還是挺費時間的,加上網上資料比較多,這裡就不說了。
在nlp中,cnn善於抽取資料中有意義的區域性模式。其可以接受任意長度的輸入並抽取有意義的區域性模式。cnn對於單詞順序敏感,但是對於其在輸入中的位置不敏感(cnn是區域性視野的)。
rnn比較適合一些序列任務。和cnn不同的是,它具有對詞順序的敏感性。一般rnn很少單獨作為乙個網路,更多的時候是作為一種資料的處理手段。例如,可以把rnn的輸出給cnn,來完成一些特定的任務。
struts超簡單入門( )
作為最流行的web framework,struts的入門可能算是比較麻煩了,本人花費了一整天的時間才算將他初步執行成功,現將成果整理如下 例子的需求 1 允許使用者輸入乙個名字,提交後返回 hello 輸出形式為hello 字串 2 當使用者沒有輸入名字時,返回乙個錯誤提示 3 當使用者輸入的名字...
struts超簡單入門( )
例子的需求 1 允許使用者輸入乙個名字,提交後返回 hello 輸出形式為hello 字串 2 當使用者沒有輸入名字時,返回乙個錯誤提示 3 當使用者輸入的名字帶 符號時,提示錯誤資訊,即不允許輸入含有 符號的名字 例子的執行環境 windows2000 jdk1.4.2 tomcat5.0 str...
超簡單git入門
安裝完後,右擊目標資料夾,選擇git bash,就可以輸入git命令操作了。二 常用的git操作過程 我們首次用git管理工程,有兩種方法 1 先有本地工程,然後提交遠端倉庫 2 先轉殖遠端倉庫到本地,然後建立本地工程。1 先建立本地工程,提交遠端倉庫 git init 初始化 git add 新增...