本文介绍了传统的三层神经网络模型,首先介绍了网络中的神经单元概念,将一个神经单元视为一个逻辑回归模型。因此,神经网络可以看作是逻辑回归在(宽度,深度)上的延伸;然后,前向传播是一个复合函数不断传播的过程,最终视目标而定损失函数;最后,反向传播则是对复合函数求导的过程。当然三层神经网络只是深度学习的雏形,如今深度学习已经包罗万象。

作者 | 文杰

编辑 | yuquanle

三层神经网络

A、神经单元

深度学习的发展一般分为三个阶段,感知机-->三层神经网络-->深度学习(表示学习)。早先的感知机由于采用线性模型,无法解决异或问题,表示能力受到限制。为此三层神经网络放弃了感知机良好的解释性,而引入非线性激活函数来增加模型的表示能力。三层神经网络与感知机的两点不同:

1)非线性激活函数的引入,使得模型能解决非线性问题。

2)引入激活函数之后,不再会有损失的情况,损失函数采用对数损失,这也使得三层神经网络更像是三层多元(神经单元)逻辑回归的复合。

神经网络中每一个神经元都可以看作是一个逻辑回归模型,三层神经网络就是三层逻辑回归模型的复合,只是不像逻辑回归中只有一个神经元,一般输入层和隐藏层都是具有多个神经元,而输出层对应一个logistic回归单元或者softmax单元,或者一个线性回归模型。

这里对一些常用的非线性激活函数做一些简单的介绍(图像,性质,导数):

性质:对于以上几个非线性激活函数都可以看作是

的一个近似。采用近似的一个重要原因是为了求导,早起常采用平滑的sigmoid和tanh函数,然而我们可以发现这两个函数在两端都存在导数极小的情况,这使得多层神经网络在训练时梯度消失,难以训练。而Relu函数则很好的解决两端导数极小的问题,也是解决神经网络梯度消失问题的一种方法。

导数

B、前向传播

前向传播是一个复合函数的过程,每一个神经元都是一个线性函数加一个非线性函数的复合,整个网络的结构如下:其中上标表示网络层,所以表示输出层。

向量形式:

矩阵形式:

其中线性函数还是,不过要注意的是这里由于每一层不仅一个神经元,所以逻辑回归中的向量则扩展为矩阵,表示有多个神经元(也正是因为多个神经元,导致神经网络具有提取特征的能力)。非线性函数则可以有以下选择,目前来看Relu函数具有一定的优势。

其中值得注意的是矩阵的行列,深度学习常采用一列表示一个样本,所以网络中数据矩阵的大小如下:

损失函数同样采用对数损失(二分类):

C、反向传播

由于神经网络是一个多层的复合函数,前向传播就是在计算复合函数,所以反向传播就是一个链式求导过程,确定所有参数的负梯度方向,采用梯度下降的方法来更行每一层网络的参数。

1.损失函数:

2.激活函数:

3.线性函数:

对于损失函数直接对各个变量求导如下:

值得注意的是激活函数是一个数值操作,不涉及矩阵求导,线性函数中是因为是作用于个样本,所以在确定负梯度方向时需要个样本取均值,而对求导则不需要求均值。

代码实战

int trainDNN()
{Matrix x;char file[20]="data\\train.txt";x.LoadData(file);x = x.transposeMatrix();cout<<"x,y"<<endl;cout<<"----------------------"<<endl;Matrix y;cout<<x.row<<endl;y=x.getOneRow(x.row-1);x.deleteOneRow(x.row-1);y=one_hot(y,2);cout<<x.row<<"*"<<x.col<<endl;cout<<y.row<<"*"<<y.col<<endl;const char *initialization="he";double learn_rateing=0.1;int iter=1000;double lambd=0.1;double keep_prob=0.5;bool print_cost=true;const char *optimizer="gd";int mini_batch_size=64;double beta1=0.9;double beta2=0.999;double epsilon=0.00000001;DNN(x,y,optimizer="gd",learn_rateing=0.001,initialization="he",lambd=0.001,keep_prob = 1,mini_batch_size=64, \beta1=0.9, beta2=0.999, epsilon=0.00000001, iter=5000, print_cost=true);predict(x,y);return 0;
}

int DNN(Matrix X,Matrix Y,const char *optimizer,double learn_rateing,const char *initialization, double lambd, double keep_prob, \int mini_batch_size,double beta1, double beta2, double epsilon, int iter, bool print_cost)
{/**初始化参数**/int i=0,k=0;int lay_dim=3;int lay_n[3]= {0,3,1};lay_n[0]=X.row;string lay_active[3]= {"relu","relu","sigmoid"};sup_par.layer_dims=lay_dim;for(i=0; i<lay_dim; i++){sup_par.layer_n[i]=lay_n[i];sup_par.layer_active[i]=lay_active[i];}init_parameters(X,initialization);double loss;Matrix AL(Y.row,Y.col,0,"ss");double *keep_probs;if(keep_prob==1){keep_probs=new double (sup_par.layer_dims);for(k=0;k<sup_par.layer_dims;k++){keep_probs[k]=1;}}else if (keep_prob<1){keep_probs=new double (sup_par.layer_dims);for(k=0;k<sup_par.layer_dims;k++){if(k==0 || k==sup_par.layer_dims-1){keep_probs[k]=1;}else{keep_probs[k]=1;}}}for(i=0; i<iter; i++){//cout<<"-----------forward------------"<<"i="<<i<<endl;AL=model_forward(X,keep_probs);//cout<<"-----------loss--------------"<<endl;loss=cost_cumpter(AL,Y,lambd);if(i%100==0)cout<<"loss="<<loss<<endl;//cout<<"-----------backword-----------"<<endl;model_backword(AL,Y,lambd,keep_probs);//cout<<"-----------update--------------"<<endl;updata_parameters(learn_rateing,i+1,optimizer,beta1,beta2,epsilon);}predict(X,Y);return 0;
}

int predict(Matrix X,Matrix Y)
{int i,k;parameters *p;p=&par;p->A = X.copyMatrix();Matrix AL;double *keep_probs=new double [sup_par.layer_dims];for(k=0;k<sup_par.layer_dims;k++){keep_probs[k]=1;}AL=model_forward(X,keep_probs);for(i=0;i<Y.col;i++){if(AL.data[0][i]>0.5)AL.data[0][i]=1;elseAL.data[0][i]=0;}double pre=0;for(i=0;i<Y.col;i++){if((AL.data[0][i]==1 && Y.data[0][i]==1)||(AL.data[0][i]==0 && Y.data[0][i]==0))pre+=1;}pre/=Y.col;cout<<"pre="<<pre<<endl;return 0;
}

欢迎扫码添加小编微信,一起交流学习(请备注自己的研究方向):

链接:https://github.com/myazi/myLearn/blob/master/DNN.c

【机器学习基础】三层神经网络相关推荐

  1. 【机器学习】三层神经网络

    点击上方蓝色字体,关注AI小白入门哟 跟着博主的脚步,每天进步一点点 本文介绍了传统的三层神经网络模型,首先介绍了网络中的神经单元概念,将一个神经单元视为一个逻辑回归模型.因此,神经网络可以看作是逻辑 ...

  2. 机器学习基础(一)——人工神经网络与简单的感知器

    机器学习基础(一)--人工神经网络与简单的感知器 (2012-07-04 19:57:20) 转载▼ 标签: 杂谈 分类: machineのlearning 从最开始做数据挖掘而接触人工智能的知识开始 ...

  3. 1.3 机器学习基础-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 1.2 偏差/方差 回到目录 1.4 正则化 机器学习基础 (Basic "Recipe" for Machine Learning) 上节课我们讲的是如 ...

  4. [Python人工智能] 三.theano实现分类神经网络及机器学习基础

    从本篇文章开始,作者正式开始研究Python深度学习.神经网络及人工智能相关知识.前两篇文章讲解了神经网络基础概念.Theano库的安装过程及基础用法.theano实现回归神经网络,这篇文章主要讲解机 ...

  5. 神经网络与深度学习(一)——机器学习基础

    神经网络与深度学习 (一)--机器学习基础 1.人工智能基础概念 2. 机器学习 2.1 基本概念 2.2 机器学习的三个基本要素 2.2.1 模型 2.2.2 学习准则 2.2.2.1 损失函数 L ...

  6. 神经网络——机器学习基础

    机器学习基础 本章会将你对这些问题的直觉固化为解决深度学习问题的可靠的概念框架.我们将把所有这些概念--模型评估.数据预处理.特征工程.解决过拟合--整合为详细的七步工作流程,用来解决任何机器学习任务 ...

  7. 机器学习(MACHINE LEARNING)MATLAB三层神经网络的简单应用

    文章目录 1 目的 2 设计思路 3 代码 4 输出 项目地址!!!!!!!!!!!!!!!!!!!!!!!! 1 目的 进行1-100以内的质数分类 2 设计思路 1.生成1-100以内的数和对应二 ...

  8. 从头学习计算机网络_如何从头开始构建三层神经网络

    从头学习计算机网络 by Daphne Cornelisse 达芙妮·康妮莉丝(Daphne Cornelisse) 如何从头开始构建三层神经网络 (How to build a three-laye ...

  9. Tensorflow神经网络框架 小例子 三层神经网络 卷积神经网络 循环神经网络 神经网络可视化

    Tensorflow神经网络框架 以前我们讲了神经网络基础,但是如果从头开始实现,那将是一个庞大且费时的工作,所以我们选择一条捷径---神经网络框架.我理解的神经网络框架就相当于一个工具包.就比如我们 ...

最新文章

  1. SpringCloud Alibaba 微服务架构版本说明
  2. python代码该怎么简化_如何简化这个python代码(从书中分配)?
  3. linux管理用户组,技术|如何在 Linux 系统中通过用户组来管理用户
  4. MYSQL数据库——mysql的数据类型和运算符
  5. Py之docx:Python库之docx简介、安装、使用方法详细攻略
  6. VTK:颜色边缘用法实战
  7. 窗口分析函数_8_计算某列的中间值
  8. 【C#】获取网页内容及HTML解析器HtmlAgilityPack的使用
  9. RPM方式安装MySQL5.6和windows下安装mysql解压版
  10. Sprint2-2.0
  11. 产品经理如何基于需求迭代产品(下篇3):产品的整体设计之逻辑层和交互层...
  12. ai怎么渐变颜色_你根本想不到AI的混合工具有多神奇!
  13. 【git】源代码管理工具 GIT的使用步骤的详细讲解
  14. getline基本用途
  15. JAVA开源B2C系统
  16. 深度学习 机器学习 花书免费下载《Deep Learning》
  17. CPU使用率和负载Load计算方法
  18. 普通人适合哪种O2O创业模式 O2O模式的应用价值是什么?
  19. 约瑟夫问题c语言链表41人,约瑟夫问题 C语言链表实现
  20. UOS 安装腾讯会议的踩坑记录

热门文章

  1. meta viewport原理
  2. 互联网热点:“双十一”节奏提前,猿辅导、掌门教育积极转型素质教育
  3. 操作系统春招面试复习之:存储管理
  4. 最新消息,青岛的农贸市场将迎来大变革
  5. 【转】【青春励志】当幸福来敲门——我的考研故事
  6. 【网络-实验】恐怖的网络环路
  7. 【Android进阶】14、theme 主题 和 menu 顶部应用栏
  8. AI 产品如何做产品定位分析?
  9. python PIL将图片转换成九宫格拼图样式
  10. 防复制防破解小区门禁梯控升级非联网CPU卡脱机写卡门禁梯控一卡通系统92HID623CPU V5.00操作说明之设备与楼栋单元设置