今天我們來講講線性回歸和神經網路的關係。
首先說結論,線性回歸其實也是個神經網路,其實不光是線性回歸,多項式回歸,邏輯回歸等等也都可以看成是乙個神經網路。
考慮到大家可能對線性回歸或者神經網路的概念有那麼點疑惑,這裡簡單的講講什麼是線性回歸和神經網路。
如圖所示,我們可以很輕易的看出來,y軸上的變數正隨著x的變大而變大,這似乎是乙個趨勢,但是我們需要如何去描述這個趨勢呢?
我們不僅希望我們能夠描述出這個趨勢,還希望能夠根據這個趨勢做出相應的**。
比如x = 100的時候,相應的y是多少呢?
這個時候線性回歸就非常的重要了。我們觀察到,這些資料點似乎是線性增長的,即y隨著x的增大而增大,我們似乎是能夠用一條直線來表示它。
比如這樣:
當然還可以是這樣:
其實吧,照這樣搞下去,可以畫成任何樣子,只要是個直線就行。
但是,人們希望,這條直線能夠最好的表現整個資料的趨勢,也就是說人們希望,**點的距離和樣本點的距離盡可能的小。如下圖所示。
於是乎人們就有了乙個想法,既然我們希望**點和樣本點的誤差(即距離)盡可能小,那答案豈不是呼之欲出。答案就是將每個**點和樣本點的距離相減,然後將他們加起來,然後我們想辦法改變其中的引數,使得它們的和達到乙個最小值不就行了嗎?最終,人們採取的做法就是如下公式。(這個公式叫做均方誤差,我們也經常稱其為損失函式,你可能還見過這個公式的其他寫法,其實他們都大同小異)
這裡的y_pred,其實就是我們**出來的值,也就是我們畫的直線上的點。我們在初中就學過了,一條直線可以用乙個函式表示即y = a*x + b。其中x就是我們x軸上的x,a和b就是我們需要調整的引數,我們不斷的調整a和b引數的值,我們就能改變均方誤差的大小,我們的目的就是使均方誤差達到最小化。至於怎麼調整引數使得均方誤差達到最小,那就有點複雜了,我們就不展開了,就稍微提一下,數學家喜歡採用最小二乘法來求解最優引數,而實際應用中,我們多採用一種叫梯度下降的方法來優化引數,使其達到最小值。
接下來我們來聊聊什麼是神經網路。
神經網路,顧名思義,是受了生物學的啟發。(注意,只是受到了啟發,實際上我們現在說的人工神經網路和真實生物神經網路差異巨大)
簡單說一下就是,生物神經元用電傳遞訊號,樹突部分接收訊號,神經元的細胞體處理訊號,然後訊號再由軸突,軸突末梢傳遞到下乙個神經元。
這種模式完全可以抽象成乙個三層模型。
第一層是輸入層,第二層是處理層,第三層是輸出層。
簡單說來就是幹這麼幾件事,輸入資料,處理資料,輸出資料。
然後我們的人工神經元就誕生了。
如圖所示,這個圖是乙個簡單的人工神經元,但是,它完全可以做到任何線性回歸能做到的事情。
這個神經元的工作流程是這樣的,首先,輸入x和1,在傳輸的線路上,它們被賦予了不同的權重也就是a*x和b*1,這相當於,生物訊號傳遞過程中訊號有大有小。
經過不同通道上權重的過濾,它們到達了細胞體內,細胞體內對它們的暫時處理是相加,也就變成了,a*x + b*1,然後輸出。
於是輸出變成了y = a * x + b,如果我們對其求均方誤差,很明顯這和我們之前說的線性回歸是一模一樣的。
同理,我們可以增加輸入訊號(當然也可以加輸出訊號),使得整個神經元更加複雜,這樣神經元的表示能力就更加強了。如果你學過多元線性回歸,多項式回歸等等,你會發現,這些都可以用乙個人工神經元來表示,道理和剛才講的一元線性回歸是一樣的。
實際上我們通常將神經網路的輸入和權重分別用乙個矩陣來表示,使用矩陣也就是向量化,在計算機中計算的時候就能平行計算,計算速度會比序列計算速度高很多,例如一元線性回歸的輸入矩陣可以表示為:
權重矩陣可以表示為:
在計算的時候,兩者做個矩陣乘法就完成了。
乙個神經元就已經能有如此強大的威力,多個神經元,多層神經網路就更加厲害了。
希望大家理解了題目,為什麼線性回歸也是神經網路。
如何畫神經網路 為什麼線性回歸也是神經網路
今天我們來講講線性回歸和神經網路的關係。首先說結論,線性回歸其實也是個神經網路,其實不光是線性回歸,多項式回歸,邏輯回歸等等也都可以看成是乙個神經網路。考慮到大家可能對線性回歸或者神經網路的概念有那麼點疑惑,這裡簡單的講講什麼是線性回歸和神經網路。如圖所示,我們可以很輕易的看出來,y軸上的變數正隨著...
神經網路多元線性回歸
jupyter notebook import pandas as pd import numpy as np import tensorflow as tf import matplotlib.pyplot as plt matplotlib inline 資料 讀取資料 data pd.read...
1 2神經網路實現線性回歸
w tf.variable tf.random uniform 1 1.0,1.0 name w 隨機初始化權重引數 1到1之間 b tf.variable tf.zeros 1 name b 以0為初始化,1 表示維度 y w x data b 目標函式 loss tf.reduce mean t...