ReLU解决异或划分

ReLU(Rectified Linear Units)

f(x)=\begin{cases} & x,\text{ if } x>=0 \\ & 0,\text{ if } x<0 \end{cases}

ReLU强大的原因之一就是可以完美地线性划分异或问题(异或的重要性不用多提,在数电逻辑实现和许多决策或加密算法中都是基础)(还有一个重要原因时ReLU可以解决多层网络梯度消失的问题)

异或的数据空间表示出来如图

 当运算量相同时(1,1)(0,0),结果为0;当运算量不同时(1,0)(0,1),结果为1

如上图中不同颜色点代表不同的情况

显然无法线性划分两种情况(一条线将相同属性划分到相同区域)

而通过ReLU可将异或的数据空间变化到如下图

其中橘色点代表异或值为1的情况,蓝色点代表异或值为0的情况,显然此时可以清晰地进行划分

具体实现过程:

    (能看到这的人一定是了解神经网络的,其实结果已经呼之欲出了,就是需要求出权重W和偏置b)

 W=\begin{bmatrix} 1 & 1\\ 1& 1 \end{bmatrix}    

 b=\begin{bmatrix} 0 &-1 \end{bmatrix}

输入为包含异或信息的矩阵(包含了异或的所有情况)

X=\begin{bmatrix} 1 &0 \\ 0& 1\\ 1&1 \\ 0 & 0 \end{bmatrix}

进行运算

ans=X*W+b

得到结果

ans=\begin{bmatrix} 1 &0 \\ 1& 0\\ 2& 1\\ 0& -1 \end{bmatrix}

再利用ReLU进行激活

out=f(ans)=\begin{bmatrix} 1 &0 \\ 1&0 \\ 2&1 \\ 0 &0 \end{bmatrix}

可以看到X映射到了out,X中异或取值为1的对应项全映射到了(1,0),异或取值为0的对应项分别映射到了(2,1)和(0,0)

\begin{bmatrix} 1 &0 \\ 0 &1 \\ 1& 1\\ 0& 0 \end{bmatrix} \rightarrow \begin{bmatrix} 1 &0 \\ 1& 0\\ 2& 1\\ 0 & 0 \end{bmatrix}

就是之前看见的图了

Python实现:

import numpy as np
X = np.array(
[
    [1,0],
    [0,1],
    [1,1],
    [0,0]
]
)

W=np.array(
[
    [1,1],
    [1,1]
]
)

b=np.array(
[
    [0,-1]
]
)

def affine_forward(X ,W ,b):
    N = X.shape[0]
    x_new = X.reshape(N,-1)
    out = np.dot(x_new ,W)+b
    #print(out)
    out = np.maximum(out,0)
    cache = (X ,W ,b)
    return out,cache

out=affine_forward(X,W,b)[0]
print(out)

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值