什么是神经网络?

我们常常用深度学习这个术语来指训练神经网络的过程。
神经网络就是一个通过深度学习构建出来的大规模函数。可以通过任意x得到一个想要的结果y
ReLU激活函数:全称是Rectified Linear Unit。可以理解成max(0,x),这也是你得到一个这种形状的函数的原因。

神经网络的监督学习

对于一个神经网络的训练过程,人为的设定某些需要的参数和结果。用来导向神经网络的发展方向。
对于图像应用,我们经常在神经网络上使用卷积(Convolutional Neural Network),通常缩写为CNN
对于序列数据,经常使用RNN,一种递归神经网络(Recurrent Neural Network

从历史经验上看,处理非结构化数据是很难的,与结构化数据比较,让计算机理解非结构化数据很难

神经网络规模和其准确性的关系图

神经网络方面的一个巨大突破是从sigmoid函数转换到一个ReLU函数

通过不断修改算法,代码中的细节。来不断提搞构建高效的神经网络。

神经网络的编程基础

二分类(Binary Classification)

神经网络的训练过程可以分为前向传播反向传播两个独立的部分
前向传播就是根据训练集得到代价函数。
反向传播再通过最小化代价函数解的之前的参数。

逻辑回归(Logistic Regression)

逻辑回归(logistic regression)是一个用于二分类(binary classification)的算法
Hypothesis Function(假设函数):

将ReLu函数重新变为
sigmoid
函数

##逻辑回归的代价函数(Logistic Regression Cost Function)
训练参数w和参数b,你需要定义一个代价函数

逻辑回归的输出函数:

损失函数又叫做误差函数,用来衡量算法的运行情况,Loss function
一般我们用预测值和实际值的平方差或者它们平方差的一半,但是通常在逻辑回归中我们不这么做,因为当我们在学习逻辑回归参数的时候,会发现我们的优化目标不是凸优化,只能找到多个局部最优值,梯度下降法很可能找不到全局最优值,虽然平方差是一个不错的损失函数,但是我们在逻辑回归模型中会定义另外一个损失函数。

逻辑回归可以看做是一个非常小的神经网络

梯度下降法(Gradient Descent)

在你测试集上,通过最小化代价函数(成本函数)J(w,b)来训练的参数w和参数b,

由于逻辑回归函数的代价函数,J(w,b)的特性,我们必须定义其为凸函数。也就是

形如此
如果是非凸,则有多个局部最小值,无法得出结果

梯度下降通过不断迭代参数w,b来找到最小的成本函数J(w,b)

使用计算图求导数(Derivatives with a Computation Graph)

正向或者说从左到右的计算来计算成本函数J,你可能需要优化的函数,然后反向从右到左计算导数

逻辑回归中的梯度下降(Logistic Regression Gradient Descent)

通过计算偏导数来实现逻辑回归的梯度下降算法

1.


一个示例代码流程:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
J=0;dw1=0;dw2=0;db=0;
for i = 1 to m
z(i) = wx(i)+b;
a(i) = sigmoid(z(i));
J += -[y(i)log(a(i))+(1-y(i))log(1-a(i));
dz(i) = a(i)-y(i);
dw1 += x1(i)dz(i);
dw2 += x2(i)dz(i);
db += dz(i);
J/= m;
dw1/= m;
dw2/= m;
db/= m;
w=w-alpha*dw
b=b-alpha*db

当你应用深度学习算法,你会发现在代码中显式地使用for循环使你的算法很低效,同时在深度学习领域会有越来越大的数据集。所以能够应用你的算法且没有显式的for循环会是重要的,并且会帮助你适用于更大的数据集。所以这里有一些叫做向量化技术,它可以允许你的代码摆脱这些显式的for循环。