【机器学习基础】三层神经网络

深度学习—简单的三层神经网络—Python(numpy) 代码+图解 代码: import numpy as np #sigmoid激活函数 def sigmoid(x): return 1 / (1 + np.exp(-x)) #初始化 def init_network(): network = {} network['W1'] = np.array([[0.1, 0.3, 0.5], [0.2, 0.4, 0.6]]) network['b1'] = np.array([0.1, 0.3, 0.5]) network[ 阅读详情

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

作者 | 文杰

编辑 | yuquanle

三层神经网络

A、神经单元

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

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

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

640?wx_fmt=png

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

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

640?wx_fmt=png

640?wx_fmt=png

640?wx_fmt=png

640?wx_fmt=png


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

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

导数:








B、前向传播

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

向量形式:

640?wx_fmt=png

矩阵形式:

640?wx_fmt=png

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

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

640?wx_fmt=jpeg

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

三层神经网络的训练模型,深度神经网络如何训练 例如,如果我们在进行视觉模式识别,那么在第一层的神经元可能学会识别边,在第二层的神经元可以在边的基础上学会识别出更加复杂的形状,例如三角形或者矩形。新的网络结构中最著名的就是CNN,它解决了传统较深的网络参数太多,很难训练的问题,使用了“局部感受野”和“权植共享”的概念,大大减少了网络参数的数量。新的方法就多了:新的激活函数:ReLU,新的权重初始化方法(逐层初始化,XAVIER等),新的损失函数,新的防止过拟合方法(Dropout,BN等)。当然同时也学到了许多其他的关于cnn的。 阅读详情

相关推荐

人工神经网络的拓扑结构,三层神经网络结构图

BP(BackPropagation)神经网络是1986年由Rumelhart和McCelland为首的科学家小组提出,是一种按误差逆传播算法训练的多层前馈网络,是目前应用最广泛的神经网络模型之一。BP网络能学习和存贮大量的输入-输出模式映射关系,而无需事前揭示描述这种映射关系的数学方程。它的学习规则是使用最速下降法,通过反向传播来不断调整网络的权值和阈值,使网络的误差平方和最小。BP神经网络模型拓扑结构包括输入层(input)、隐层(hiddenlayer)和输出层(outputlayer)。

aifans_bert的博客 2825

神经网络笔记1-三层BP神经网络

神经网络性质简介 三层BP神经网络可以逼近任意连续的函数。三层BP神经网络简单易行,可靠性好,故只选择一个隐含层。 设隐藏层单元个数为ppp,输入层单元个数为mmm,输出层单元个数为nnn,有经验公式: p=5+m+n±5p=5+\sqrt{m+n}\pm 5p=5+m+n​±5 设第kkk层的输入为向量rk\mathbf{r}^{k}rk,其第iii个单元的值为rikr_{i}^{k}rik​ 第kkk层的输出为向量ak\mathbf{a}^{k}ak,其第iii个单元的值为aika_{i}^{k}ai

m0_53253879的博客 5003

【机器学习:十一、神经网络的数学表达式】

整个网络的前向传播可以表示为以下流程:Z1W1Xb1Z1W1Xb1A1g1Z1A1g1Z1Z2W2A1b2Z2W2A1b2A2g2Z2A2g2Z2Z3W3A2b3Z3W3A2b3Yg3Z3Yg3Z3三层神经网络通过两层隐藏层的线性变换和激活函数,将输入特征映射到复杂的输出空间。

计算机领域博客,与时俱进的思想与技术。 1651

第三章 神经网络

本文中介绍了感知机到神经网络,介绍了神经网络中的激活函数;并以3层神经网络为例介绍了神经网络信号实现的具体过程。

abxl987的博客 3398

基于sympy的python实现三层BP神经网络算法

#!/usr/bin/python # -*- coding: utf-8 -*- """ 写一个三层的BP神经网络(3,2,1),3是输入数据的维度,隐层设置节点数为2,1是因为每个观测的target都是一个标量即只有一个数; 1.随机生成两个随机矩阵作为三个层之间的连接权值,注意矩阵大小设置;设定误差阈值等参数 2.使用i=random.randint(0,len(x)-1)随机产生一个样品的输入及target 3.使用权值w1,w2,sigmoid函数、diffsigmoid函数计算隐层和输出层的输.

sinat_28371057的博客 524

ML、RL、DM、DL初步理解

2020年2月15日16:24:51 今日任务: 弄明白以下四个内容的特点、方向、内容以及关系: 机器学习(ML) 深度学习(DL) 强化学习(RL) 数据挖掘(DM) ML 维基百科解释的很详细! 机器学习算法基于样本数据(称为“ 训练数据 ”)建立数学模型,以便进行预测或决策,而无需明确地编程以执行任务。 机器学习是人工智能的一个部分,很广泛的用于应用中,如邮件检测和计算机视觉等。与统计学...

小卜妞的博客 1万+

政安晨:【完全零基础】认知人工智能(三)【超级简单】的【机器学习神经网络】—— 三层神经网络示例

咱们还没有演示过使用矩阵进行计算得到经由神经网络馈送的信号,我们也没有演示过多于2层的神经网络示例,在这篇文章里,咱们将构建一个三层神经网络的示例,并观察如何处理中间层的输出以作为最后第三层的输入,可以想象到这个示例估计会非常有趣。 为什么用3层神经网络呢?第一层为输入层,最后一层为输出层,中间层我们称之为隐藏层。虽然隐藏层听起来很神秘、很黑暗,但是很遗憾,我们这样称呼中间层,其理由并不神秘:中间层的输出不需要很明显地表示为输出,因此我们称之为“隐藏”层。

政安晨——致力于AI人工智能数字互动领域 1883

高精度磁力计RM3100 传感器LR振荡电路偏置电路分析

LR振荡器电路通过正向和反向偏置实现磁场测量。Sen-XY-f/Z-f传感器线圈作为电感元件构成LR弛张振荡电路,其振荡频率随磁场变化而改变。测量时,线圈一端接地,另一端交替通入正反向电流,通过两次偏置测量消除电路自身磁场干扰,仅保留外部磁场影响。MagI2C芯片通过高速时钟测量振荡次数和时间差,计算磁场强度。该设计具有抗干扰强、数字化输出和高分辨率等优势,是RM3100传感器高精度磁测量的核心原理。

bother3000的博客 1136

机器学习基础(十三)神经网络——以简单实现三层DNN为例(附简单mnist手写实现)

loss’(py) = (py-y)/(py*(1-py)) = (a3-y)/(a3*(1-a3)) #这个求导过程可自行推导。损失函数使用交叉熵公式,令py = a3。简单介绍一下神经网络的计算方式。用代码简单理解一下神经网络。

screaming_zz的博客 499

宝塔面板添加站点及运营商SSL免费证书的申请与使用

本文详细介绍在宝塔面板下如何正确添加站点、配置站点,及在运营商如何申请免费SSL证书,将其配置到宝塔站点里。 给你的网站加一把锁,教你免费SSL证书申请,配置到自己的网站中。 环境:Ubuntu server 18 工具:宝塔控制面板 平台:阿里云 Web服务器:Nginx 宝塔:https://www.bt.cn/ 阿里云:https://www.aliyun.com/ 腾讯云:https://cloud.tencent.com/ 要求: 1.宝塔控制面板搭建完毕。 2掌握域名解析的原理。 3.了解ht

贺兰山长老 5060

最小路径和——动态规划求解(Java实现)

最小路径和——动态规划求解(Java实现) 题目: 给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。 示例: 输入: [ [1,3,1], [1,5,1], [4,2,1] ] 输出: 7 解释: 因为路径 1→3→1→1→1 的总和最小。 这题和机器人走路的思路类似,就是状态方程有所不同,...

weixin_43395911的博客 896

Python搭建tensorflow三层神经网络

Python搭建tensorflow三层神经网络的小例子 import tensorflow as tf import numpy as np import matplotlib.pyplot as plt #输出图像的库 #加入神经网络层,activation_function是激励函数,初始化为None def add_layer(inputs,in_size,out_size,

qiujie3108的博客 1055

从共现矩阵到共现图一步到位——详解版

1.共现矩阵 判断大量不同文本之间,相邻词的联系,两词在所有文本中相邻的次数在矩阵中用数值表示。(参考此) 例子如下: 1.1 文本 • I like deep learning. • I like NLP. • I enjoy flying. 1.2 共现矩阵 2.共现图 2.1 数据预处理(节点和边) 获取文件node.csv和edge.csv。代码详见github仓库 2.2 共现图的制作 2.2.1 gephi的安装(参考此) (1)先下载gephi (2) 再配置java环境(下载java1.8

微乐的博客 4403

【机器学习 | 第一篇】- 三分钟了解机器学习所有概念

机器学习入门指南:从基础概念到应用实践 本文系统介绍了机器学习的核心知识体系,主要内容包括: 人工智能三大核心概念及其关系(AI→ML→DL) 机器学习发展历程的四个阶段 AI发展的三大要素(数据、算法、算力)及硬件支持 机器学习常用术语(样本、特征、标签等)和数据集划分原则 五大机器学习算法分类(监督/无监督/半监督/自监督/强化学习) 完整的机器学习建模流程(数据获取→特征工程→模型训练→评估部署) 文章通过丰富的图表和实例,帮助读者快速掌握机器学习的基本原理和应用场景,适合初学者建立系统认知框架。

pusosjs的博客 897

概述DeepLab系列(deeplab v1, deeplab v2, deeplab v3, deeplab v3+)

前言:图像分割是指像素级别的图像识别,即标注出图像中每个像素所属的对象类别。 语义分割更注重类别之间的区分,而实例分割更注重个体之间的区别。 DeepLab是由Google团队提出的一系列图像分割算法。 DeepLab v1 (2014年) Paper (ICLR 2015) Code 创新点: 空洞卷积(Atrous Conv); <解决编码过程中信号不断被下采样,细节丢失的问题> 全连接条件随机场(Fully-connected Conditional Random Field)。

ZSH12345678900的博客 5530

Cursor锁机了怎么办?实测这个开源插件帮你无限“续杯”,附详细安装与防踩坑指南

本文提供了Cursor锁机问题的详细解决方案,包括使用开源插件`cursor-fake-machine`修改机器标识、锁定配置文件权限以及优化使用规范。同时介绍了如何利用Cursor开发油猴脚本将微信公众号文章高效转换为Markdown格式,提升内容创作效率。

weixin_26805597的博客 768

BP神经网络的Matlab实现——人工智能算法

这几天在各大媒体上接触到了人工智能机器学习,觉得很有意思,于是开始入门最简单的机器算法——神经网络训练算法(Neural Network Training);以前一直觉得机器学习很高深,到处是超高等数学、线性代数、数理统计。入坑发现确实是这样!但是呢由项目实例驱动的学习比起为考试不挂科为目的的学习更为高效、实用!在遗传算法、神经网络算法的学习入门之后觉得数学只要用心看没问题的(即使是蒙特卡洛和马尔

善水的博客 19万+

【YOLO11改进 - 注意力机制】SCSA通过结合空间注意力和通道注意力,提高各种下游视觉任务的性能。

【YOLO11改进 - 注意力机制】SCSA通过结合空间注意力和通道注意力,提高各种下游视觉任务的性能。

专注于图像领域,主要研究内容包括计算机视觉和深度学习,特别是在图像分类、目标检测和图像生成等方面有深入的研究和实践经验。 477

Google机器学习实践指南(神经网络入门)

机器学习基础(32)-神经网络入门指南(约7分钟)一、神经网络:模仿大脑的AI模型核心组件:神经网络的基本处理单元,接收输入并产生输出:决定输入信号的重要性,在训练过程中不断调整:控制神经元激活的难易程度,类似生物神经元的阈值:为网络引入非线性能力,使其可以学习复杂模式为什么需要神经网络?对于如下的数据,我们是否有什么办法进行分类呢?对于上述的数据,我们无法用线性模型:y = W1X1 + W2。

qq_40821260的博客 860

机器人学(三):手眼标定

主要讲了eye-to-hand的手眼标定求解算法,包括AX=XB和AX=YB两种情况,包含SVD法、Tsai-Lenz法、最小二乘法等,从原理到解法再到算法代码实现,包括matlab代码、C++代码、库的使用等,简单明了,容易在实际项目中进行应用

行者无疆的博客 2554

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

神经网络论文看了三遍没懂,直到我用了这5个阅读方法

从Java后端转行AI,面对神经网络论文完全看不懂,通过系统学习机器学习入门与基础课程,结合五个高效阅读和复现习惯,最终从复现模型到Kaggle获奖。分享非科班转行者的真实踩坑路径与关键课程推荐,帮你绕开死磕论文的弯路。

weixin_47315004的博客 9

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

深度学习入门全解析:从核心概念到实战基础 | 技术研讨会精华总结

在人工智能飞速发展的今天,深度学习早已成为撬动技术革新的核心引擎✨。它不仅是机器学习的进阶形态,更让计算机具备了自动感知、理解、处理复杂数据的能力,彻底重构了图像识别、自然语言处理、语音交互等领域的技术范式。本文基于「深度学习知识研讨会」核心内容,从基础定义、技术对比、网络架构、数据处理四大维度,拆解深度学习入门必备知识点,搭配可视化图表与关键代码,带你一站式打通深度学习入门关卡🚀。

软件科学-郝学胜 764

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

python神经网络编程mobi_Python神经网络编程

神经网络是一种模拟人脑的神经网络,以期能够实现类人工智能的机器学习技术。本书揭示神经网络背后的概念,并介绍如何通过Python实现神经网络。全书分为3章和两个附录。第1章介绍了神经网络中所用到的数学思想。第2章介绍使用Python实现神经网络,识别手写数字,并测试神经网络的性能。第3章带领读者进一步了解简单的神经网络,观察已受训练的神经网络内部,尝试进一步改善神经网络的性能,并加深对相关知识的理解...

weixin_39956350的博客 155

机器学习——人工神经网络之多层神经网络(多层与三层)

目录 一、多层神经网络 1、多层神经网络数学模型 2、数学模型中的非线性函数fai 1)非线性函数fai存在的意义 2)非线性函数fai具体是什么? 3、多层神经网络与单层神经网络的区别与改进 1)单层神经网络数学模型 2)多层神经网络模型 3)区别 二、三层神经网络 1、定理 2、一些概念(决策面、神经元、神经网络层数) 1)决策面 2)神经元 3)神经网络层数n 3、常见的三层神经网络模型(含w,b的参数设置) 1)一个三角形决策面的神经网络模型(两层神经网络) 2)

python_AI_fans的博客 1万+

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

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

fengdu78的博客 3373
上一篇: 非常详细的sklearn介绍
下一篇: 工程师必备!最好的九张机器学习/深度学习代码速查表
机器学习算法那些事
博客等级 码龄9年 1633粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值