权重W不能全部初始化为0,原因很简单,我们可以自己在本子上推导一下,假设现有一个含有一个隐藏层,隐藏层含有两个神经元初始输入为两个向量的网络,如果权重初始化全部为0,那么,第一层的输出,会和第二层的输出相等,这样我们反向传播更新权重的时候也会发现,两个W始终相等,所以这种初始化的方法行不通,另外再说b,这里得说一下的就是b是可以被初始化为0的,对训练效果并没有多少影响。那么,w,b到底怎样将他们初始化呢,其实可以用随机数的方法将他们初始化。用python来写就是像这样:

W_1 = np.random.randn((2,2))*0.01
b_1 = np.zero((2,1))
W_2 = np.random.randn((1,2))*0.01
b_2 = 0

第一行代码后面乘一个0.01的作用是在为了防止Z过大,而导致梯度下降得太慢,训练速度太慢。

这里牵扯到几种激活函数了

常见的激活函数有四种,我之前还只知道sigmoid。。

1,sigmoid

2,tanh

3,ReLU(线性整流函数)

4,Leaky RU

在知道这个之前,我一直以为sigmoid是最好用的,之后在看了资料之后才知道tanh其实效果比sigmoid好一点,因为依据他的图像,我们不难发现。他的取值范围在[-1,1],隐藏层的输出限定这之间,可以看成是在0值附近分布,均值为0,有归一的效果,所以作为隐藏层的激活函数的话,tanh比sigmoid好,输出的话,一般还是选sigmoid

但是,这两个函数,任何事都有两面,他们也有不好的时候,那就是在Z过大的时候,这两个函数的函数曲线变得很平稳,导致他们梯度下降的很慢,所以这里又来了后面那两个函数,一个是ReLU,他在Z大于0的 时候,斜率都为1,这样就加快了梯度下降的速度,不过,他的缺点也很明显,他在z小于0时候,斜率恒为0,这是LeakyRU就出来了,他的 另外一部分斜率不为0。

总结,一般分类问题中,我们用sigmoid,不过隐藏层一般用tanh,实际中,一般用后面两个,各有优势,具体用哪个,具体问题具体分析

W,b的初始化和几种激活函数的更多相关文章

  1. easyUI 初始化的两种方式

    easyUI 初始化的两种方式: class方式和js方式: <!DOCTYPE html> <html lang="en"> <head> & ...

  2. 使用GoldenGate初始化的两种方式

    在使用OGG开始增量数据的实时复制之前,一般需要对当前的存量数据进行初始化,如果是同构数据库,则可以使用数据库自带的工具完成,比如Oracle DB中的rman, expdp/impdp等. 其实og ...

  3. js二维数组定义和初始化的三种方法总结

    js二维数组定义和初始化的三种方法总结 方法一:直接定义并且初始化,这种遇到数量少的情况可以用var _TheArray = [["0-1","0-2"],[& ...

  4. 一题多解,ASP.NET Core应用启动初始化的N种方案[下篇]

    [接上篇]"天下大势,分久必合,合久必分",ASP.NET应用通过GenericWebHostService这个承载服务被整合到基于IHostBuilder/IHost的服务承载系 ...

  5. [PyTorch]PyTorch中模型的参数初始化的几种方法(转)

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 本文目录 1. xavier初始化 2. kaiming初始化 3. 实际使用中看到的初始化 3.1 ResNeXt,de ...

  6. 【jQuery】初始化的三种方法

    JQ初始化方法实际上有两种,由于美元符号可以定义 jQuery,那么就有三种方法可以进行初始化操作,根据个人习惯来选择吧! 第一种 $(document).ready(function(){ // j ...

  7. java中Map和List初始化的两种方法

    第一种方法(常用方法): //初始化List List<string> list = new ArrayList</string><string>(); list. ...

  8. jQuery页面加载初始化的3种方法

    jQuery 页面加载初始化的方法有3种 ,页面在加载的时候都会执行脚本,应该没什么区别,主要看习惯吧,本人觉得第二种方法最好,比较简洁. 第一种: $(document).ready(functio ...

  9. IOS-UIIamge初始化的几种方法的比较

    一.imageNamed——方法介绍imageNamed:是UIImage的一个类方法,它做的事情比我们看到的要稍微多一些.它的加载流程如 下:1.系统回去检查系统缓存中是否存在该名字的图像,如果存在 ...

随机推荐

  1. Linux 目录说解

    目录 1.树状目录结构图 2./目录 3./etc/目录 4./usr/目录 5./var/目录 6./proc/目录 7./dev/目录 该文章主要来自于网络进行整理. 目录结构参考地址: http ...

  2. 集成 dubbo 微服务

    微服务架构近年来非常的火,阿里 的dubbo 是其中的一种解决方案. dubbo 的微服务主要分为以下几部分: 1.注册中心 2.服务提供者 3.消费者 4.监控平台 1.一般流程服务提供者向注册中心 ...

  3. react父转子

    父组件使用子组件,子组件绑定父组件数据 ,子组件用props使用父组件数据 import React, { Component } from 'react'; import logo from './ ...

  4. PHP时间范围:本周、本月、下月等简写

    在阅读TP5.1源码,发现其在时间范围上的写法很特别,个人第一次见,做一次记录 $timeRule = [ 'today' => ['today', 'tomorrow'], 'yesterda ...

  5. ibatis注意要点

    一.ibatis的关键字like查询 select * from t_student where s_name '%张%'; 这种like语句在ibatis中怎么写,他们现在的项目是用ibatis作为 ...

  6. SHELL脚本之awk妙用

    对于一个sougou文本文件,解压后大概4G,要求在其基础上切出第一列时间年月日时分秒增加在列中,作为hive的一个索引.先将文件head一下展示格式: [root@Master date]# hea ...

  7. Kotlin零碎总结

    1.对于Kotlin的包方法其实对应Java而言是静态方法,如Entrance.kt文件的外部有fun main(...方法,那么编译成字节码后就是Java的Entrance类里有public sta ...

  8. 恢复VS2010/VS2013项目为VS2008项目

    https://blogs.msdn.microsoft.com/rextang/2009/07/06/convert-vs2010-projects-back-to-vs2008-ones/ 摘抄如 ...

  9. centos修改主机名命令

    centos修改主机名命令   需要修改两处:一处是/etc/sysconfig/network,另一处是/etc/hosts,只修改任一处会导致系统启动异常.首先切换到root用户.    vi / ...

  10. redis链接

    参考资料:http://www.runoob.com/redis/redis-connection.htmlRedis 连接Redis 连接命令主要是用于连接 redis 服务.实例以下实例演示了客户 ...