一、主要内容

最近看到两篇文章,写用arctan 来优化relu激活函数的文章。
《基于Arc-LSTM的人职匹配研究》
《基于ArcReLU函数的神经网络激活函数优化研究》
就想着其实可以将逻辑回归的sigmoid函数换成标准化后的arctan函数,同样可以进行二阶求导,梯度下降。

二、主要思路

详细的简单脚本可以参考笔者的 github:Arctan_logistic

逻辑回归简单讲就是单层全连接层,所以激活函数可以进行替换

def activation(linear_x, method='sigmoid'):"""激活函数, sigmoid / arctan"""if method == 'sigmoid':out = np.zeros_like(linear_x, dtype=np.float64)biger_bool = np.abs(linear_x) >= 100out[biger_bool] = 1 / ( 1 + np.exp(-100 * np.sign(linear_x[biger_bool])) )out[~biger_bool] = 1 / ( 1 + np.exp(- linear_x[~biger_bool]))return outif method == 'arctan': # (arctan / np.pi * 2 + 1)/2 归一化return np.arctan(linear_x) / np.pi + 1/2def activation_derivative(nd,  method='sigmoid'):"""激活函数求导"""if method == 'sigmoid': # sigmoid_outreturn nd - nd * ndif method == 'arctan': # linear_xreturn 1 / (1 + nd * nd)  / np.piimport matplotlib.pyplot as plt
draw_x = np.linspace(-10, 10, 1000)
fig, axes = plt.subplots(1, 2, figsize=(16, 8))
axes[0].plot(draw_x, activation(draw_x, method='sigmoid'), label='sigmoid')
axes[0].plot(draw_x, activation(draw_x, method='arctan'), label='arctan')
axes[0].set_title('Activation')
axes[0].legend()
axes[1].plot(draw_x, activation_derivative(activation(draw_x, method='sigmoid'), method='sigmoid'), label='sigmoid')
axes[1].plot(draw_x, activation_derivative(draw_x, method='arctan'), label='arctan')
axes[1].set_title('Activation Derivation')
axes[1].legend()
plt.show()

从图中可以看出,arctan的梯度下降会更加迅速, 同时比sigmoid更不容易趋于0。

链式求导迭代


def epoch_train(x, y, w, lr, method='sigmoid', batch_size=128, epoch_num=0, verbose=0):"""训练一次数据"""loop = Truedata_g = data_generator(x, y, batch_size=batch_size)loss_list = []while loop:try:xt, yt = next(data_g)except StopIteration:loop = Falselinear_x = xt.dot(w) # (m, n).dot((n, 1)) -> (m, 1)pred_y = activation(linear_x, method=method)loss_d = loss_derivative(yt, pred_y)if method == 'sigmoid':w_d = xt.T.dot(activation_derivative(pred_y, method='sigmoid') * loss_d) / batch_sizeif method == 'arctan':# (m, n).T.dot((m, 1)) -> (n, 1)w_d = xt.T.dot(activation_derivative(linear_x, method='arctan') * loss_d) / batch_sizew -= lr * w_d# print('w_d:', w_d)loss_list.append(binary_loss(yt, activation(xt.dot(w))))if verbose:print('w:\n', w)print(f'Epoch [{epoch_num}] loss: {np.mean(loss_list):.5f}')print('--'*25)return w

三、结论

3.1 结论

在大数据场景下,对数据分布不进行过多的假设,采用arctan 替换sigmoid 函数逻辑回归收敛所需迭代的次数会更少。

**************************************************
--------------------------------------------------
t_epoches-10 test_time: 0
LogisticRegression acc: 81.579%
my-sigmoid-lr acc: 81.579%
my-arctan-lr acc: 86.842%--------------------------------------------------
t_epoches-10 test_time: 1
LogisticRegression acc: 89.474%
my-sigmoid-lr acc: 73.684%
my-arctan-lr acc: 76.316%--------------------------------------------------
t_epoches-10 test_time: 2
LogisticRegression acc: 84.211%
my-sigmoid-lr acc: 84.211%
my-arctan-lr acc: 86.842%**************************************************
--------------------------------------------------
t_epoches-40 test_time: 0
LogisticRegression acc: 86.842%
my-sigmoid-lr acc: 89.474%
my-arctan-lr acc: 81.579%--------------------------------------------------
t_epoches-40 test_time: 1
LogisticRegression acc: 84.211%
my-sigmoid-lr acc: 84.211%
my-arctan-lr acc: 84.211%--------------------------------------------------
t_epoches-40 test_time: 2
LogisticRegression acc: 81.579%
my-sigmoid-lr acc: 78.947%
my-arctan-lr acc: 81.579%

机器学习_基于arctan的逻辑回归相关推荐

  1. 机器学习学习吴恩达逻辑回归_机器学习基础:逻辑回归

    机器学习学习吴恩达逻辑回归 In the previous stories, I had given an explanation of the program for implementation ...

  2. 吴恩达《机器学习》学习笔记七——逻辑回归(二分类)代码

    吴恩达<机器学习>学习笔记七--逻辑回归(二分类)代码 一.无正则项的逻辑回归 1.问题描述 2.导入模块 3.准备数据 4.假设函数 5.代价函数 6.梯度下降 7.拟合参数 8.用训练 ...

  3. 【机器学习】基于GBDT的数据回归及python实现

    [机器学习]基于GBDT的数据回归及python实现 一.Boosting技术 二.GBDT原理与应用 2.1.GBDT思想 2.2.基于GBDT的数据回归 2.3.基于GBDT的数据分类 三.基于G ...

  4. 机器学习第四章之逻辑回归模型

    逻辑回归模型 4.1 逻辑回归模型算法原理 4.1.1 逻辑回归模型的数学原理(了解) 4.1.2 逻辑回归模型的代码实现(重要) 4.1.3 逻辑回归模型的深入理解 4.2 案例实战 - 股票客户流 ...

  5. 【数据分析与挖掘】基于LightGBM,XGBoost,逻辑回归的分类预测实战:英雄联盟数据(有数据集和代码)

    机器学习-LightGBM 一.LightGBM的介绍与应用 1.1 LightGBM的介绍 1.2 LightGBM的应用 二.数据集来源 三.基于英雄联盟数据集的LightGBM分类实战 Step ...

  6. R语言glm拟合logistic回归模型实战:基于glm构建逻辑回归模型及模型系数统计显著性分析、每个预测因子对响应变量的贡献

    R语言glm拟合logistic回归模型实战:基于glm构建逻辑回归模型及模型系数统计显著性分析.每个预测因子对响应变量的贡献 目录

  7. TF之LoR:基于tensorflow利用逻辑回归算LoR法实现手写数字图片识别提高准确率

    TF之LoR:基于tensorflow利用逻辑回归算LoR法实现手写数字图片识别提高准确率 目录 输出结果 设计代码 输出结果 设计代码 #TF之LoR:基于tensorflow实现手写数字图片识别准 ...

  8. 吴恩达《机器学习》学习笔记五——逻辑回归

    吴恩达<机器学习>学习笔记五--逻辑回归 一. 分类(classification) 1.定义 2.阈值 二. 逻辑(logistic)回归假设函数 1.假设的表达式 2.假设表达式的意义 ...

  9. python机器学习手写算法系列——逻辑回归

    从机器学习到逻辑回归 今天,我们只关注机器学习到线性回归这条线上的概念.别的以后再说.为了让大家听懂,我这次也不查维基百科了,直接按照自己的理解用大白话说,可能不是很严谨. 机器学习就是机器可以自己学 ...

最新文章

  1. 【leetcode】500. Keyboard Row
  2. tensorflow中的交叉熵损失
  3. springAOP编程-aspectJ开启注解自动代理
  4. html悬浮弹窗后面背景变深,JS+CSS实现Div弹出窗口同时背景变暗的方法
  5. 学生档案c语言编程,学生档案管理问题
  6. python 类可以调用实例变量_python面向对象中类对象、实例对象、类变量、实例变量、类方法、实例方法、静态方法...
  7. 阿里云物联网平台 > 设备接入 > 使用开放协议自主接入 > CoAP协议接入 >
  8. MyEclipse或Eclipse导出JavaDoc中文乱码问题解决
  9. java实现多种格式视频上传、转码、播放、下载工具类
  10. excel 瀵煎叆mysql_hypermesh瀵煎叆ansys
  11. vue实现上传图片识别文字
  12. Python之Turtle库绘制简单图形
  13. PB函数大全【转自 http://blog.csdn.net/xiaoxian8023 】
  14. 吉大计算机专业有名的导师,2019吉林大学计算机科学与技术学院导师简介:申铉京...
  15. 倒排表数据结构、通配符查询、拼写纠正详解
  16. 小白对于linux的命令的一些基础认识
  17. NOIP学习之函数与过程抽象:91.质数的和与积
  18. 激烈竞争环境下,数字资产交易所们该如何突破?
  19. linux命令ps aux|grep xxx详解
  20. 小游戏制作QQ宠物系列1 ---- 吹泡泡

热门文章

  1. 程序员html 5制作相册,前端程序员给女朋友做的相册——原生JS
  2. 新闻稿怎么写更有传播效果?新闻稿撰写的方法与技巧
  3. 浅谈在XXX公司的职业经历
  4. 南京驾照过期申请新的驾照流程
  5. 微软操作系统内部版本号大全
  6. php的switch判断,条件判断 - switch《 PHP 基础 》
  7. gravity 和 layout_gravity的区别
  8. 基于JAVA酒店管理系统计算机毕业设计源码+数据库+lw文档+系统+部署
  9. 免费进销存软件哪家好用
  10. 面试题:为什么使用消息队列?消息队列有什么优缺点?