神经网络的Python实现(一)了解神经网络

网络上深度学习相关博客教程质量参差不齐,很多细节很少有文章提到,所以本着夯实深度学习基础的想法写下此系列博文。

本文会从神经网络的概述、不同框架的公式推导和对应的基于numpy的Python代码实现等方面进行干货的讲解。如有不懂之处欢迎在评论留言,本人也初学机器学习与深度学习不久,有不足之处也请欢迎我联系。:)

欢迎到我的个人博客

推荐书籍与视频教程:
《机器学习》--周志华
《Deep learning》--Ian Goodfellow、Yoshua Bengio 和 Aaron Courville
李宏毅深度学习视频课程-youtube Bilibili


神经网络

神经网络是由具有适应性的简单单元组成的广泛并行互连的网络,它的组织能够模拟生物神经系统对真实世界物体所作出的交互反应。

神经网络最基本的组成是神经元模型,每个神经元与其他神经元相连,神经元接受到来自 n 个其他神经元传递过来的输入信号,这些信号通过带有权重的连接进行传递,神经元接收到的总输入值将于阈值进行比较,然后通过“激活函数”处理产生输出。把许多神经元按一定层次结构连接起来就得到了神经网络。

感知机模型

感知机模型(Perceptron)由两层神经元组成,分别是输入层与输出层。

image

感知机模型是最为基础的网络结构,其计算形式如下

y=f\left(\sum_i\omega_ix_i+b\right)

其中 f 为激活函数。我们先假设 f 是阶跃函数(Step function)。

def sign(out):
    """
    y = sign(w·x + b)
    :param out - the result of w·x + b
    :return: y
    """
    if out >= 0:
        return 1
    else:
        return -1

感知机的学习规则非常简单,对于训练样本 (x,y),若当前感知机的输出为 \hat{y},则感知机参数更新方式如下

\begin{align} \omega &\leftarrow \omega_i + \Delta\omega_i & \Delta\omega_i &= \eta\ (y-\hat{y})\ x_i \nonumber\\ \qquad& \nonumber\\ b_i &\leftarrow b_i + \Delta b_i & \Delta b_i &= \eta\ (y-\hat{y}) \nonumber \end{align}

其中 \eta 称为学习率(learning rate)

下面我们使用Python来实现感知机进行分类:

# 初始化变量w,b
w = np.zeros(shape=data[0].shape)
b = np.zeros(shape=label[0].shape)

def update(x, y, learning_rate):
    """
    当发现误分类点时,更新参数w,b.
    更新方法:
    w = w + learning_rate * x * y
    b = b + learning_rate * y
    :param x: 误分类点坐标
    :param y: 误分类点正确分类标签
    :return: None
    """
    global w, b
    w = w + learning_rate * x * y
    b = b + learning_rate * y
    

假设训练集是线性可分的。更新过程便是,遍历全部的训练实例,通过感知机的计算方式计算出结果 y 与对应标签进行比较(感知机标签一般为 1 和 -1),如果误分便使用updata()进行参数更新。下图是感知机线性分类的拟合过程。

image

随意写的训练数据

# x
[[3.2, 0.8], [5, 5], [3, 3], [4, 3], [1, 1], [2, 2], [1, 4]]
# y
[-1, 1, 1, 1, -1, -1, -1]

感知机只有输入层和输出层,且只有输出层神经元进行激活处理,即只有一层功能神经元,其学习能力非常有限。如果问题是非线性可分问题,那么感知机会发生振荡,无法收敛。

多层网络

为了解决非线性可分问题,那么便需要采用多层功能神经元,如简单的两层感知机。如图

image

其中输入层与输出层之间一层被称为隐藏层(隐含层),隐藏层和输出层都是拥有激活函数的功能神经元。一般情况下,隐藏层可以有多层,同层神经元之间不存在连接,也不存在跨层连接。这样的神经网络结构被称为多层前馈神经网络(multi-layer feedforward neural networks)

因多层功能神经元的存在,多层网络的学习能力要强得多,同时简单的感知机学习规则显然已经无法满足要求。更强大的学习算法,误差逆传播(error BackPropagation)算法,即BP算法便是最成功的神经网络学习算法。

TODO

在下一篇博文中,我们将使用BP算法来实现“全连接网络”。

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

推荐阅读更多精彩内容