Feedforward Neural Network

前言

前馈神经网络的目标是近似某个函数 f^* 。后面在围绕解释的也就是这个话题。

从XOR问题说起

xor(异或)运算应该都不陌生,两个二进制值 x_{1}x_{2} 的运算,当恰好有一个值为1时,结果就是1,其余是0。我们把这个规则(运算)当成我们要学习的函数 y = f^*(x),我们的模型给出一个函数 y = f(x;\theta) ,我们希望能够不断调整 \thetaf 能够 接近 f^*

在这个例子中。x \in X = \{[0,0]^T,[0,1]^T,[0,0]^T,[1,1]^T\}, y \in \{1,0\}
我们可以把这个问题当作回归问题(当然当作分类也是可以的),并使用均方误差作为损失函数,那么损失函数就可以表示为
J(\theta)= \frac{1}{4}\sum_{x\in X}(f^*(x)-f(x;\theta))^2
然后我们确定 f(x;\theta) 的具体模型,假设是一个线性模型(简单一点),那么 \theta 就包含 \omegab 两个参数,模型也就是
f(x;\omega,b)=x^T\omega +b
然后通过求解最小化的 J(\theta) 来得出 \omegab 的值。

%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np

def plot_data(data, labels):
    
    one = data[labels == 1, :]
    zero = data[labels == 0, :]
    plt.scatter(one[:, 0], one[:, 1], 
                       color='red', marker='+', s=200)
    plt.scatter(zero[:, 0], zero[:, 1], 
                       color='blue', marker='.',s=200)

one = np.array([[1, 0], [0, 1]])
zero = np.array([[0, 0], [1, 1]])

data = np.concatenate([one, zero])
labels = np.array([1, 1, 0, 0])
plot_data(data, labels)
image.png

上面用代码构造了这个数据并简单展示一下。然后我们用sklearn里的线性模型来进行求解

from sklearn import linear_model
clf = linear_model.LinearRegression()
clf.fit(data, labels)
print(clf.coef_)
print(clf.intercept_)
out:
[0. 0.]
0.5

发现 \omega 的值 是0(向量),b 的值是0.5,也就是说不论输入数据是什么,输出都是0.5。怎么形象的理解这个问题呢,简单说就是一个线性模型根本无法区分开这个数据(有人说,不对啊,svm就可以,我试过了,svm确实在构造一个超平面,但是它可以使用核函数把数据维度提高成线性可分的去解决非线性问题。单纯的线性模型是不可以的。)我们观察上图发现,当 x_{1}=0 时,模型输出必须随着 x_{2} 的增大而增大。当 x_{1}=1 时,模型必须随着 x_{2} 的增大而减小。线性模型不能使用 x_{1} 的值来改变 x_{2} 的值

那么如何解决这个问题呢。传统机器学习那些处理非线性的思路是可行的,还有一种方法就是使用一个模型来学习一个不同的特征空间,然后在这个空间上使用线性模型可以表示这个解。

具体来说,到这里就可以引入简单的前馈神经网络了。(如下图)它有一个隐藏层并且隐藏层中包含两个单元。这个前馈神经网络通过函数 f^{(1)}(x;W,c) 计算隐藏单元的向量 h
h=f^{(1)}(x;W,c)
这些隐藏单元的值随后被用作第二层的输入。第二层就是这个网络的输出层。输出层仍然是一个线性回归模型,只不过变量是 h 而非 x。那么现在就可以用
f(x;W,c,\omega ,b)=f^{(2)}(f^{(1)}(x))
来表示网络

g1.gv.png

还有种简单的表示方法,如下

g2.gv.png

现在要考虑的问题是 f^{(1)} 用什么样的模型表示,假设它依旧是线性回归模型那么 f^{(1)}=W^Tx + c,如果不考虑 c截距的话,f 将表示成 f=\omega ^TW^Tx,这仍旧是一个线性函数,我们前面讨论到问题的所在就是线性所致,所以需要一个非线性的变换,在神经网络的通常做法加入一个激活函数(关于激活函数会在后面详细介绍)来使之前的仿射变换变成非线性的,也就是
f^{(1)}=g(W^Tx+c)
这个用一个比较通用的激活函数ReLU(rectified linear unit)。g(z)=max\{0,z\},那么现在我们的网络就可以表示成
f(x;W,c,\omega ,b)=\omega^Tmax\{0,W^Tx+c\}+b

现在继续讨论xor问题,我们确定解的参数(至于参数为什么会是这个,也在后续说明,这里只是解释这个问题)
W=\begin{bmatrix} 1 & 1 \\ 1 & 1 \end{bmatrix}
c=\begin{bmatrix} 0 \\ -1 \end{bmatrix}
\omega=\begin{bmatrix} 1 \\ -2 \end{bmatrix}
b=0

用X作为输入矩阵,当经过ReLU后,数据变成
\begin{bmatrix} 0 & 0 \\ 1 & 0 \\ 1 & 0 \\ 2 & 1 \end{bmatrix}
我们用上面的分析,绘制下图

new_data = np.array([[1,0],[1,0],[0,0],[2,1]])
plot_data(new_data, labels)
image.png

我们发现数据集变成线性可分的了,继续用线性回归模型去计算现在的数据,也得到了结果。

clf.fit(new_data, labels)
print(clf.coef_)
print(clf.intercept_)
out:
[ 1. -2.]
6.661338147750939e-16

回顾这个过程,不论是损失函数的选择,模型的选择,或者是激活函数,再到后面的给定的参数,都有点“假”,这也是我们后面要详细说的东西。

[这是一个正在更新的东西,因为课比较多,人比较懒,也懂的少,所以比较慢]

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,458评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,030评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,879评论 0 358
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,278评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,296评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,019评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,633评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,541评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,068评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,181评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,318评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,991评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,670评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,183评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,302评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,655评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,327评论 2 358

推荐阅读更多精彩内容

  • *** 代码部分可以直接通过Jupyter Notebook来查看 这几天在上Andrew Ng教授开的Cours...
    廖致君阅读 8,357评论 0 8
  • 昨天下班有点早,自己去看了个电影。因着之前朋友圈有人提到了“七月与安生”作为一个伪文青,定然打算去看一看。 七月与...
    半理阅读 219评论 0 1
  • 新世界的人回来 把欢愉分给旧时界的人们 旧时界的孩子走出去 愉悦,冒险的 生活在新世界 然后 再次回到旧时界 把愉...
    关馨仁阅读 177评论 1 2
  • 文字©/ 何川 音乐©/ 王睿 —— 昨晚一个好朋友失恋了。她说那个相爱了整整四年的男人,跑去爱了别人。 想起前些...
    NJ何川阅读 236评论 0 0