深度学习笔记【1】
序言#
鸽了朋友能有两天,终于开始写第一篇博客。也是从今天开始吧,我会定期更新我的关于深度学习的博客,现在由于自己的网站备案还没好,就暂时先更新在这儿了。
本篇是该系列的开头之作,鉴于对深度学习领域真的知之甚少,就找了些前辈的东西来入门。本文主要参考的是Victor Zhou先生的博文,以及我的一位朋友的博文,在此对二位表示感谢,文末我会附上参考博文的链接。
现下我们所言的神经网路,一般都应该称之为人工神经网络或类神经网络,是模仿生物神经网络而来的计算模型。他被用于解决各种很难被传统的基于规则的编程所解决的问题。接下来待我一一讲来。
神经元#
神经元(Neuron)是神经网络的基石,一个神经元需要输入,输出,以及相应的计算.。
这是一个有两个输入的神经元,每一个输入都经过加权xix_ixi*wiw_iwi,然后求和(∑xiwi)+b(\sum x_i w_i )+b(∑xiwi)+b,最终通过激活函数输出。其中,具体的权值wiw_iwi我们是不知道的,这也是随后的学习算法的主要作用。
在加权求和的过程中,为何要将求和结果与偏置(bias)相加呢?其实是因为在生物神经网络中,神经元需要做够多的电位变化,亦即超过阈值,才会释放动作电位。在人工神经网络中也是如此,只有当你神经元的加权和大于某一阈值时,输出1,反之为0。而为了更好的计算和表达,我们将与阈值与加权和移到同一边,同时给之取名偏置 bias。
神经元的python实现如下
class Neuron: #神经元
def __init__(self, weights, bias):#初始化
self.weights = weights #权重
self.bias = bias #偏置
在这里,没有涉及到计算的部分,此部分会在接下来实现
Activation函数#
这个函数就是用于约束神经元输出的。不知聪明的你有没有发现,我们之前的加权和的结果是无界的,即既可无穷大又可无穷小。所以我们必须将其约束在一个区间中(最终我们可将输出结果视作为概率),为此我们需要一个函数来实现。在这我们选用 sigmoid 函数。
sigmoid 函数的函数表达式为:
其输出在(0,1)的范围内。
用 python 实现如下
def sigmoid(x):
return 1/(1+np.exp(-x))
至此,我们就可以将神经元的输出函数给写出来。
class Neuron:
def _init_(self,weights,bias):
self.weights=weights
self.bias=bias
def feedforward(self,inputs):
total=np.dot(self,weights,inputs)+self.bias
return sigmoid(total)
神经网络#
接下来我们就要试着搭建一个神经网络了。
比如说我们遇到这样一个问题:
Name | Weight(Ib) | Height |
---|