神經網絡原來這麼簡單 機器學習入門貼送給你

2020-12-17 手機鳳凰網

你想學機器學習嗎?這裡有一個入門貼適合你。

什麼神經網絡、隨機森林、計算機視覺通通一網打盡。

這個Facebook軟體工程師做了一個入門貼。

專為基礎為零的初學者打造。

有基礎的同學,也可以來看看加深一下理解。

我們就以神經網絡為例先來一睹為快吧!

神經網絡概論

作者說,神經網絡並不複雜!

「神經網絡」一詞很流行,人們通常認為它很難,但其實要簡單得多。

是不是這樣呢?先看再說。

神經網絡的理解主要分為三個部分,神經元、神經網絡的構建、訓練神經網絡。

神經元——神經網絡的基本單元

這是2-input神經元的樣子。

首先神經元接受輸入x1、x2,進行一些數學運算以後,然後產生一個輸出y。

在神經元裡,通常會發生三件事:

1、每個輸入乘以相應的權重;

2、將所有加權輸入加在一起,在加上一個偏差b;

3、導入一個激活函數,得到輸出y。

通常來說,激活函數使用Sigmoid函數,也就是常說的S型函數,輸入任意值(-∞,+∞),最後輸出都能停留在0-1之間。

對此,他還舉了一個簡單的例子。

以激活函數是S型函數、2輸入神經元為例,設置參數 w=[0,1] (w1=0,w2=1),b=4。

input:x=[2,3]

output:y=0.999

這也就是最為樸素的神經網絡——前饋神經網絡。

對此,作者還用Python實現了整個過程。

import numpy as np

def sigmoid(x):

# Our activation function: f(x) = 1 / (1 + e^(-x))

return 1 / (1 + np.exp(-x))

class Neuron:

def __init__(self, weights, bias):

self.weights = weights

self.bias = bias

def feedforward(self, inputs):

# Weight inputs, add bias, then use the activation function

total = np.dot(self.weights, inputs) + self.bias

return sigmoid(total)

weights = np.array([0, 1]) # w1 = 0, w2 = 1

bias = 4 # b = 4

n = Neuron(weights, bias)

x = np.array([2, 3]) # x1 = 2, x2 = 3

print(n.feedforward(x)) # 0.9990889488055994

構建神經網絡

神經元連接在一起就是神經網絡。

兩個輸入,一個含有兩個神經元的隱藏層,一個含有1個神經元的輸出層就構建了一個神經網絡。

需要注意的是,可以用多層隱藏層。就比如,像這樣:

我們仍以上個示例的條件為例。

一個神經網絡可以包含任意數量的層和任意數量的神經元。

以Python代碼示例如下:

import numpy as np

# ... code from previous section here

class OurNeuralNetwork:

'''

A neural network with:

- 2 inputs

- a hidden layer with 2 neurons (h1, h2)

- an output layer with 1 neuron (o1)

Each neuron has the same weights and bias:

- w = [0, 1]

- b = 0

'''

def __init__(self):

weights = np.array([0, 1])

bias = 0

# The Neuron class here is from the previous section

self.h1 = Neuron(weights, bias)

self.h2 = Neuron(weights, bias)

self.o1 = Neuron(weights, bias)

def feedforward(self, x):

out_h1 = self.h1.feedforward(x)

out_h2 = self.h2.feedforward(x)

# The inputs for o1 are the outputs from h1 and h2

out_o1 = self.o1.feedforward(np.array([out_h1, out_h2]))

return out_o1

network = OurNeuralNetwork()

x = np.array([2, 3])

print(network.feedforward(x)) # 0.7216325609518421

訓練神經網路——計算損失函數

假設,我們正在處理以下這個項目。通過人員的體重和身高來判斷性別。

以weight、height作為輸入,以gender作為輸出。

Male設置為0,Female設置為1,還對其餘數據進行了簡化。

在訓練神經網絡之前,首先需要一個方法來量化它做得有多「好」,是否能夠做得「更好」,那就是損失函數(loss)。

這裡,我們將使用損失函數的一種——均方誤差來計算。

預測結果越好,說明損失也就會越低。而訓練神經網絡的目的,就在於儘可能的減少損失。

如果我們確信所有的人都是Male,也就是說預測值為0,會出現什麼樣的結果?

Python示例:

import numpy as np

def mse_loss(y_true, y_pred):

# y_true and y_pred are numpy arrays of the same length.

return ((y_true - y_pred) ** 2).mean()

y_true = np.array([1, 0, 0, 1])

y_pred = np.array([0, 0, 0, 0])

print(mse_loss(y_true, y_pred)) # 0.5

訓練神經網絡——最小化損失

計算了損失函數之後,就需要將損失最小化,這也是訓練神經網絡的最終目的所在。

接下來帖子有一段多變量演算,涉及微積分。

作者表示,

如果對微積分不滿意,可隨時跳過。

簡單起見,我們就假設這個數據集中只有Alice。

那麼,它的損失函數就是這樣。

那麼它的權重w跟偏差b,在圖上標示,那麼就有6個權重變量,3個偏差變量。

於是,便將損失函數寫為多變量函數。

想像一下,我們只要調整w1,就可能導致L的變化。那具體是如何變化的呢?這就需要計算偏導數了。

利用鏈式求導法則進行反向求導,而這一過程就叫做反向傳播

作者溫馨提示,看這個過程的時候不要著急,拿出手中的筆和紙,能夠幫助你理解。

接下來,使用隨機梯度下降的優化算法,公式表示如下(以w1為例):

其中的「學習速率」控制著訓練速度,過大或者過小都不合適。

如果我們將所有的變量都進行這樣的優化,那麼損失函數將逐漸減少,神經網絡就能夠得到改善。

簡單來說,整個訓練過程是這樣的:

1、數據集中選擇一個樣本,就如Alice。

2、利用反向傳播計算所有變量的偏導數。

3、使用隨機梯度下降來訓練神經網絡,更新變量。

4、返回步驟1。

神經網絡的部分就介紹到這裡,怎麼樣?看完之後,有什麼感想?

是不是覺得神經網絡也還好了。還有其他概念等著你來學習呢!

相關焦點

  • 神經網絡原來這麼簡單,機器學習入門貼送給你|乾貨
    白交 發自 凹非寺量子位 報導 | 公眾號 QbitAI你想學機器學習嗎?這裡有一個入門貼適合你。什麼神經網絡、隨機森林、計算機視覺通通一網打盡。這個Facebook軟體工程師做了一個入門貼。專為基礎為零的初學者打造。有基礎的同學,也可以來看看加深一下理解。我們就以神經網絡為例先來一睹為快吧!
  • 神經網絡原來這麼簡單,機器學習入門貼送給你 | 乾貨
    白交 發自 凹非寺 量子位 報導 | 公眾號 QbitAI你想學機器學習嗎?這裡有一個入門貼適合你。
  • 我的機器學習入門路線圖
  • 機器學習入門線路
    另外,我的線路不求全面和仔細,我只提出一種可靠性最高的線路給大家,大家可以根據自己的實際情況參考,開始之前記住一點:入門玩家有簡單模式,高手玩家有困難模式,簡單模式的收穫肯定沒有困難模式高,當然的,入門玩家為了得到更大的收益可以先在簡單模式練習然後再上困難模式,遊戲怎麼玩都是自己喜歡的策略,但是值得關注的是,只有遊戲通關了才會有收益。
  • 【深度】機器學習進化史:從線性模型到神經網絡
    機器學習工具比如今我們使用的要更加簡單,他們包括邏輯回歸分析,SVMs(支持向量機),支持向量機內核,網頁排名等。利用這些技術,Google獲得了巨大成功,比如Google News就非常成功,還有Gmai垃圾郵件分類器,它利用易分布式算法進行排名和文本分類。到了上世紀90年代中期,這些技術已經變得十分成熟了。大約在2005年左右,神經網絡又開始捲土重來。
  • 入門 | 無需基礎知識,使用JavaScript構建你的第一個神經網絡
    本文將會教你以 JavaScript 庫 Brain.js 為基礎,構建並訓練自己的神經網絡。設定目標(如果你只想直接上手,請跳過這部分.)首先,本文作者還不是神經網絡或機器學習方面的專家。坦率的說,我仍然對人工智慧的大部分內容感到困惑。但希望這能夠鼓勵到正在讀這篇文章,並急切想嘗試機器學習的初學者們。
  • 人工智慧發展史,機器學習/神經網絡與其關係
    但是這種顯式的規則往往過於簡單,很難表達複雜、抽象的規則。這一階段被稱為推理期。1970 年代,科學家們嘗試通過知識庫+推理的方式解決人工智慧,通過構建龐大複雜的專家系統來模擬人類專家的智能水平。這些明確指定規則的方式存在一個最大的難題,就是很多複雜,抽象的概念無法用具體的代碼實現。
  • 2020年新書《神經網絡新手入門必備數學基礎》免費pdf分享
    本書介紹 在本書中,試圖描述數學在塑造我們對神經網絡如何運作的理解中的作用,以及我們試圖在方程中捕捉神經網絡而產生的新奇的數學概念。我的目標讀者是非專家,我將呈現神經網絡任務、模型和計算的相對簡單的例子的有偏見的選擇,而不是試圖給出一個完整的百科全書式的回顧—關於這個領域的許多數學發展的描述。 本書最新版pdf免費下載地址:個人主頁「私信」,回復關鍵字「bg20」獲取下載地址。
  • 春節充電系列:李宏毅2017機器學習課程學習筆記27之循環神經網絡 Recurrent Neural Network
    春節充電系列:李宏毅2017機器學習課程學習筆記21之結構化學習(Structured learning)介紹篇春節充電系列:李宏毅2017機器學習課程學習筆記22之結構化學習(Structured learning)線性模型春節充電系列:李宏毅2017機器學習課程學習筆記23之結構化學習-Structured SVM(part 1)春節充電系列
  • 機器學習怎麼快速入門?此文教你「宏觀」學習神經網絡和TensorFlow(實例教程)
    我認為,你應該首先能夠宏觀了解:這個應用程式是如何運行的。一旦你弄明白這一點,深入挖掘和探索這個算法的內部工作原理將變得相當簡單。那麼,你該如何培養對機器學習的直覺並實現宏觀了解呢?創建機器學習模型就是一個很好的方法。假設你依舊不知道該如何從頭開始創建這些算法,那麼你將希望使用一個幫你實現所有這些算法的庫,而這個庫就是TensorFlow。
  • 這可能是最簡單易懂的機器學習入門(小白必讀)
    雖然這聽起來很簡單,但這些技能的範圍非常大——語言處理、圖像識別、規劃等等。機器學習使用特定的算法和編程方法來實現人工智慧。沒有機器學習,我們前面提到的西洋棋程序將需要數百萬行代碼,包括所有的邊緣情況,並包含來自對手的所有可能的移動。有了機器學習,我們可以將代碼量縮小到以前的一小部分。很棒對吧? 有一個缺失的部分:深度學習和神經網絡。
  • 高清圖解:神經網絡、機器學習、數據科學一網打盡|附PDF
    今天,新智元要為大家推薦一個超實用、顏值超高的神經網絡+機器學習+數據科學和Python的完全圖解,文末附有高清PDF版連結,支持下載、列印,推薦大家可以做成滑鼠墊、桌布,或者印成手冊等隨手攜帶,隨時翻看。
  • 【翻譯】Sklearn 與 TensorFlow 機器學習實用指南 —— 第10章 人工神經網絡介紹(上)
    高度複雜的計算可以由相當簡單的神經元的巨大網絡來完成,就像一個複雜的蟻穴可以由每個螞蟻的努力構造出來。生物神經網絡(BNN)的體系結構仍然是主動研究的主題,但是大腦的某些部分已經被映射,並且似乎神經元經常組織在連續的層中,如圖 10-2 所示。
  • 機器學習|卷積神經網絡(CNN) 手寫體識別 (MNIST)入門
    如果對機器學習理論比較清楚,可以直接看第二部分 Keras 訓練模型如果對 Keras 機器學習框架也比較熟悉了,可以直接跳轉到第三部分 RT-Thread 加載 onnx 模型如果對 RT-Thread 和 onnx 模型都很熟悉了,那我們可以一起交流下如何在嵌入式設備上高效實現機器學習算法 :blush:首先,簡單介紹一下上面提到的各個話題的範圍 (Domain),人工智慧 (Artifitial
  • AI | 怎樣快速入門機器學習和深度學習?
    編者按:入門機器學習和深度學習並不是一件容易的事情。需要學習大量的知識,初學者常常會迷茫不知所措。現在我們給你帶來一篇純乾貨,幫助你入門機器學習和深度學習。《PRML》:機器學習經典,貝葉斯經典。《神經網絡與深度學習》:邱老師的開源書(https://nndl.github.io/)3.
  • 初學AI神經網絡應該選擇Keras或是Pytorch框架?
    對於許多開發者來說,TensorFlow是他們接觸的第一個機器學習框架。TensorFlow框架儘管意義非凡,引起極大關注和神經網絡學習風潮,但對一般開發者用戶太不友好。軟體開發者畢竟不是科學家,很多時候簡單易學易用是程式設計師選擇的第一要素。
  • 入門| 關於神經網絡:你需要知道這些
    網絡(NN)幾乎可以在每個領域幫助我們用創造性的方式解決問題。本文將介紹神經網絡的相關知識。讀後你將對神經網絡有個大概了解,它是如何工作的?如何創建神經網絡?實現細節(如何管理項目中的所有因素)關於神經網絡的更多信息(更多資源連結)神經網絡的發展歷史我們簡單回顧一下神經網絡的發展歷程,如果你想了解更多關於其發展歷程的信息
  • 人工神經網絡
    深度學習是機器學習研究中的一個新的領域,其動機在於建立、模擬人腦進行分析學習的神經網絡,它模仿人腦的機制來解釋數據,例如圖像,聲音和文本。深度學習是利用多層神經網絡結構,從大數據中學習現實世界中各類事物能直接用於計算機計算的表示形式,被認為是智能機器可能的「大腦結構」。簡單的說,使用多層神經網絡來進行機器學習。
  • 機器學習系列 | ML需要了解的十大神經網絡架構
    如果你曾學習過機器學習的課程,那麼你應該也接觸過神經網絡。神經網絡是一組特定的算法,它引起了機器學習領域的徹底性的變革。神經網絡啟發於生物神經網絡,當前我們所說的深度神經網絡已被證明十分有用。神經網絡本身就是一般的函數逼近,這也是為什麼他們能被運用於幾乎任何一個關於從輸入到輸出空間的複雜映射的機器學習問題中。
  • 優秀機器學習和AI課程推薦,帶你從入門到精通
    字幕組雙語原文:最棒的免費機器學習和AI課程,讓你從入門到精通英語原文:Awesome Machine Learning and AI Courses翻譯:雷鋒字幕組(明明知道)介紹性講座在機器學習和人工智慧方面,這些都是很好的入門課程。沒有ML和AI的經驗是必要的。你應該有一些線性代數,微積分入門和概率的知識。一些編程經驗也是值得推薦的。