Two Simple Examples

softmax classifier

后,我们介绍两个简单的例子,一个是线性分类器,一个是神经网络。由于网上的讲义给出的都是代码,我们这里用公式来进行推导。首先看softmax classifier 的例子。给定输入X∈RN×D,权值W∈RD×K,偏移量b∈R1×K,我们可以得到分类器对每个样本的预测分数:f=XW+b,我们可以用softmax 函数将预测分数转为概率:pi=efi∑jefj,pi

表示样本属于第i类的概率,fi,fj表示线性函数对样本属于第i,j类的预测分数。

我们可以建立如下的loss function:

Li=−log(pyi)=−log⎛⎝efyi∑jefj⎞⎠
L=1N∑iLi+12λ∑k∑lW2k,l

下面我们推导loss对W,b的偏导数,我们可以先计算loss对f的偏导数,利用链式法则,我们可以得到:

∂Li∂fk=∂Li∂pk∂pk∂fk∂pi∂fk=pi(1−pk)i=k∂pi∂fk=−pipki≠k∂Li∂fk=−1pyi∂pyi∂fk=(pk−1{yi=k})

进一步,由f=XW+b,可知∂f∂W=XT,∂f∂b=1,我们可以得到:

ΔW=∂L∂W=1N∂Li∂W+λW=1N∂Li∂p∂p∂f∂f∂W+λWΔb=∂L∂b=1N∂Li∂b=1N∂Li∂p∂p∂f∂f∂bW=W−αΔWb=b−αΔb

Neural Networks

上面介绍的是softmax 分类器,下面我们介绍神经网络。神经网络与softmax分类器类似,只是多了一个隐含层。我们先考虑其前向传递。

f1=XW1+b1h=max(0,f1)f2=hW2+b2pi=ef2i∑jef2jL=1N∑iLi+12λ∑∑w21+12λ∑∑w22

下面我们看如何利用BP对网络中的参数进行更新:

∂L∂f2=1N∂Li∂f2=1N(pk−1{yi=k})ΔW2=∂L∂W2=∂L∂f2⋅h+λW2Δb2=∂L∂b2=∂L∂f2ΔW1=∂L∂W1=∂L∂f2∂f2∂h⋅X+λW1Δb1=∂L∂b1=∂L∂f2∂f2∂h

上面的表达式忽略了矩阵运算里的一些转置,实际编写代码的时候需要注意这一点,最后,我们可以得到如下的参数更新表达式:

W1=W2−αΔW2b1=b2−αΔb2W1=W1−αΔW1b1=b1−αΔb1

还有一点,上式的N表示训练集里的样本总数,如果我们要用batch模型,那么可以将整个训练集分成若干个batch,那么此时的N就是每个batch的样本数。

Reference

http://cs231n.stanford.edu/

Convolutional Neural Networks for Visual Recognition 7的更多相关文章

  1. Convolutional Neural Networks for Visual Recognition 1

    Introduction 这是斯坦福计算机视觉大牛李菲菲最新开设的一门关于deep learning在计算机视觉领域的相关应用的课程.这个课程重点介绍了deep learning里的一种比较流行的模型 ...

  2. Convolutional Neural Networks for Visual Recognition

    http://cs231n.github.io/   里面有很多相当好的文章 http://cs231n.github.io/convolutional-networks/ Table of Cont ...

  3. 卷积神经网络用于视觉识别Convolutional Neural Networks for Visual Recognition

    Table of Contents: Architecture Overview ConvNet Layers Convolutional Layer Pooling Layer Normalizat ...

  4. Convolutional Neural Networks for Visual Recognition 8

    Convolutional Neural Networks (CNNs / ConvNets) 前面做了如此漫长的铺垫,现在终于来到了课程的重点.Convolutional Neural Networ ...

  5. Convolutional Neural Networks for Visual Recognition 5

    Setting up the data and the model 前面我们介绍了一个神经元的模型,通过一个激励函数将高维的输入域权值的点积转化为一个单一的输出,而神经网络就是将神经元排列到每一层,形 ...

  6. Convolutional Neural Networks for Visual Recognition 2

    Linear Classification 在上一讲里,我们介绍了图像分类问题以及一个简单的分类模型K-NN模型,我们已经知道K-NN的模型有几个严重的缺陷,第一就是要保存训练集里的所有样本,这个比较 ...

  7. Convolutional Neural Networks for Visual Recognition 4

    Modeling one neuron 下面我们开始介绍神经网络,我们先从最简单的一个神经元的情况开始,一个简单的神经元包括输入,激励函数以及输出.如下图所示: 一个神经元类似一个线性分类器,如果激励 ...

  8. cs231n spring 2017 lecture1 Introduction to Convolutional Neural Networks for Visual Recognition 听课笔记

    1. 生物学家做实验发现脑皮层对简单的结构比如角.边有反应,而通过复杂的神经元传递,这些简单的结构最终帮助生物体有了更复杂的视觉系统.1970年David Marr提出的视觉处理流程遵循这样的原则,拿 ...

  9. Stanford CS231n - Convolutional Neural Networks for Visual Recognition

    网易云课堂上有汉化的视频:http://study.163.com/course/courseLearn.htm?courseId=1003223001#/learn/video?lessonId=1 ...

随机推荐

  1. iOS 蓝牙功能 bluetooth

    现将创建蓝牙工程的要点总结一下,由于工程主要涉及中心模式,所以只总结中心模式的用法 1,引入CoreBluetooth.framework 2,实现蓝牙协议,如: .h文件如下 @protocol C ...

  2. php之 人员的权限管理

    1.想好权限管理的作用? 2.有什么权限内容? 3.既然有权限管理那么就会有管理员? 4.登录后每个人员的界面会是不一样的? 一.想好这个权限是什么? 就做一个就像是vip的功能,普通用户和vip用户 ...

  3. Intersection(计算几何)

    Intersection Time Limit: 4000/4000 MS (Java/Others)    Memory Limit: 512000/512000 K (Java/Others)To ...

  4. 我的Android进阶之旅------>Android系统设置默认来电铃声、闹钟铃声、通知铃声

    首先了解Android系统本身提供的默认铃声文件,这些文件都放在  /system/media/audio  目录下. /system/media/audio/ringtones   系统来电铃声 / ...

  5. nginx-gridfs的安装

    mongodb中gridfs适合存放视频和高清图片等等超大文件(小的文件建议不要存在mongodb中): 下面是在centos下配置nginx来訪问mongodb中的mp4文件: 1:安装nginx- ...

  6. R语言数据管理(三):数据读入

    R的数据读入非常灵活,即可以在R软件中直接输入,也可以读入外部数据. 一.直接输入数据 ①c()函数 ②scan()函数 其功能类似c()函数,scan()实际上是一种键盘输入数据函数.当输入scan ...

  7. Linux基础系列:常用命令(6)_nfs服务与nginx服务

    NFS介绍: NFS 是Network File System的缩写,即网络文件系统.一种使用于分散式文件系统的协定,由Sun公司开发,于1984年向外公布.功能是通过网络让不同的机器.不同的操作系统 ...

  8. iOS swift 常量 && 宏定义

    全局常量 在C和Objective-C语言源文件中定义的全局常量会自动地被Swift编译引进并做为Swift的全局常量. 预处理指令 Swift编译器不包含预处理器.取而代之的是,它充分利用了编译时属 ...

  9. vim有用的快捷键

    多行前插入字符: ctrl + v (进入列模式,选上要插入的行) shift + i 输入要统一插入的字符 esc (虽然从外面看着是只有一行插入了,但是按下esc后就会发现之前选的都插入了 删除多 ...

  10. 通过socket和Udp协议简单实现一个群体聊天工具(控制台)

    编写一个聊天程序.有收数据的部分 和 发数据的部分.这两个部分需要同时执行,这就用到多线程技术,一个线程负责收,一个现象负责发. 因为收和发动作是不一致的,所以要定义两个run方法而且这两个方法要封装 ...