一、前言
本文是本人在认真学习完[日]斋藤康毅所著《深度学习入门-基于Python的理论与实现》(因为封面上有条鱼,以下皆用《鱼书》代称之)后的学习心得与体会。至于为什么要把写成文字记录下来呢,一是为了我后续的学习方便快速地回忆之前的知识点,一是为了给同样在学习这本《鱼书》的朋友们提供一些帮助。
二、概述
该书一共包含八个章节,暂且把它分成三大部分,分别涉及到:
部分一:Python入门、感知机;
部分二:神经网络、神经网络的学习、误差反向传播法、与学习相关的技巧(我觉得部分二是其精华所在)
部分三:卷积神经网络、深度学习
三、正文部分
第一章:Python入门
该章节主要介绍了Python基础内容,从Python的安装到Python基础的语法介绍,再到机器学习、深度学习中常用库:Numpy(用于数据的高效计算)、Matplotlib(用于图形的绘制)的介绍。
可以选择安装Anaconda,它会自动安装一个基本的python,该python下已经装好了一大堆工具包,之后用到的超过一半的包不需要额外再去从pip上安装,之后也可以通过Anaconda下载一些第三方库。
第二章:感知机
感知机是神经网络的起源算法。
感知机接收多个输入信号(x1、x2 …),输出一个信号(只有1/0两种取值)。不同的输入信号对应不同的权重(w1、w2 …),当接收的信号总和(w1x1+w2x2 …)大于某个阈值(θ)时,才会输出1。
用于调整输出信号为1的程度的阈值θ挪到公式左边,把(-θ)用b代替,通常叫做偏置。
可以利用感知机构建逻辑电路:
与门:仅在两个输入均为1时输出1,否则输出0。感知机构建条件很多,比如:(w1, w2, θ) = (0.5, 0.5, 0.7)。
与非门:跟与门相反,仅在两个输入均为1时输出0,否则输出1。感知机构建条件很多,比如:(w1, w2, θ) = (-0.5, -0.5, -0.7)。
或门:只要有一个输入信号是1,输出就为1。感知机构建条件很多,比如:(w1, w2, θ) = (1, 1, 0.7)。
然而单层感知机无法实现异或门(仅当两个输入中的一方为1时,才会输出1)。
将上图转换为下图:
感知机的局限性就是它只能表示由一条直线分割的空间(线性空间)。y用○表示0,△表示1。感知机就是一条分割○△的直线。
要分开上图的○△,只能使用曲线分割出非线形空间。
叠加感知机的层数可以来表示异或门。
与门、与非门、或门均为单层感知机,而异或门是2层感知机。叠加了多层的感知机也称为多层感知机。
通过叠加层(加深层),感知机能进行更加灵活的表示(能够进行非线性的表示)
第三章:神经网络
神经网络和感知机最大的区别,其实就是激活函数不同。
上图就是一个简单的神经网络,最左侧一列为输入层,最右侧一列为输出层,中间一列为中间层(隐藏层)。
几种激活函数:
阶跃函数:随着输入函数不同,在阈值处发生急剧性的变化。感知机的激活函数就是它。
sigmoid函数:输出随着输入发生连续性的变化。
sigmoid函数的平滑性对神经网络的学习具有重要意义。
相对于阶跃函数只能返回0或1,sigmoid函数可以返回0.731 、0.880等实数。
ReLU函数:在输入大于0时,直接输出该值;在输入小于等于0时,输出0。
上述几种激活函数的代码实现(common/functions.py):