本文英文原文出自這里, 這個博客里面的內容是Java開源, 分布式深度學習項目deeplearning4j的介紹學習文檔.
簡介:
一般來說, 神經網絡常被用來做無監督學習, 分類, 以及回歸. 也就是說, 神經網絡可以幫助對未標記數據進行分組, 對數據進行分類, 或者在有監督訓練之后輸出連續的值. 典型的神經網絡在分類方面的應用, 會在網絡的最后一層使用邏輯回歸分類器(之類)的將連續(continue)的值轉換成為離散值如: 0/1, 比如, 給定一個人的身高, 體重, 以及年齡, 你可以給出它有心臟病或者沒有心臟病的判斷. 而真正的回歸是將一組連續的輸入映射到另一組連續的輸出.
例如, 給定一座房子的房齡, 面積, 以及到一所好學校的距離, 你將對這座房子的價格進行預測: 這就是連續型輸入映射到連續性輸出. 這里面沒有分類任務中的0/1, 而僅僅是將獨立變量 x 映射到連續的輸出y.
NN-Regression結構:
在上圖中, x表示輸入, 特征在網絡前面的層進行前向傳播, 很多x's與最后隱層的每個神經元相連接, 每個x將會乘上一個相應的權重w. 這些乘積之和再加上一個偏置, 被送到一個激活函數ReLU(=max(x,0)), 這個一個被廣泛應用的激活函數, 它不會像sigmoid激活函數那樣出現飽和. 對於每個隱層神經元, ReLUctant輸入一個激活值a, 在網絡的輸出節點, 計算這些激活值之和作為最后的輸出. 也就是說, 利用神經網絡來做回歸將有一個輸出節點, 而且這個節點僅是對前面節點的激活值進行相加. 得到的 ŷ就是由你所有的x映射得到的獨立變量.
訓練過程:
為了進行網絡的反向傳播以及網絡的訓練, 你可以簡單地使用網絡的輸出ŷ與真實值y進行比較, 通過調整權重和偏置使得網絡的error達到最小. 可以使用Root-means-squared-error(RMSE)作為loss函數.
可以使用Deeplearning4j來建立多層神經網絡, 在網絡的最后增加一個輸出層, 具體的代碼參考如下:
//Create output layer .layer() .nIn($NumberOfInputFeatures) .nOut(1) .activationFunction('identity') .lossFunction(LossFunctions.LossFunction.RMSE)
其中, nOut輸出層的神經元數目, nIn為特征向量的維度, 在上圖中, 這應該設置為4, activationFunction應該被設置為'identity'.
我的問題:
- 如果要輸出多個值, 怎么做? 訓練多個模型?
- 還有沒有其他的方式做回歸?