为什么使用线性函数+sigmoid激活函数可以拟合所有的函数模型
任何函数都可以用分段函数拟合
每个分段函数又都可以用sigmoid函数近似
这种思考角度,很巧妙。
关于神经网络的参数更新与反向传播
比较容易理解
关于提升模型训练效果
先看损失函数的值:
若大,则提升模型复杂度,或改进模型参数优化方法;
若小,则看测试集损失函数的值,若大,则是overfitting或者是mismatch(训练集分布与预测集不同)
关于局部极小值与鞍点
理解即可,其实一般遇到的并不是这种问题
关于训练时的 小batchsize vs 大batchsize
总的来说,大batchsize训练速度更快,但是拟合效果和推广效果较差。
一些用了大batchsize,但是训练效果仍不错的方法:
- Large Batch Optimization for Deep Learning: Training BERT in 76 minutes (https://arxiv.org/abs/1904.00962)
- Extremely Large Minibatch SGD: Training ResNet-50 on ImageNet in 15 Minutes (https://arxiv.org/abs/1711.04325)
- Stochastic Weight Averaging in Parallel: Large-Batch Training That Generalizes Well(https://arxiv.org/abs/2001.02312)
- Large Batch Training of Convolutional Networks (https://arxiv.org/abs/1708.03888)
- Accurate, large minibatch sgd:Training imagenet in 1 hour (https://arxiv.org/abs/1706.02677)
关于Adam学习率的计算方法
集合了两种思想 Momentum(惯性) + RMSProp(小斜率大步长、大斜率小步长)
关于Batch Normalization
有一定的理论证明和实验佐证,一般认为是有用的
关于梯度消失/爆炸问题
产生原因:
- 由于深度网络是多层非线性函数的堆砌,整个深度网络可以视为是一个复合的非线性多元函数。如果接近输出层的激活函数求导后梯度值大于1,那么层数增多的时候,最终求出的梯度很容易指数级增长,就会产生梯度爆炸;相反,如果小于1,那么经过链式法则的连乘形式,也会很容易衰减至0,就会产生梯度消失。
- 激活函数如sigmoid函数,导数本身就小于1,连乘后很容易发生梯度消失。初始化权重的值过大。
解决办法:
- 先进行预训练
- 对梯度设定阈值、权重正则化
- 选择relu等梯度大部分落在常数上的激活函数
- batch normalization 使输入和输出数据大小差别不大
- 残差网络
- LSTM的“门(gate)”结构(防止网络层过深)
CNN的思想
很巧妙,所谓的卷积,其实就是不同的区域共用参数。
使用共享参数提取整个tensor的不同区域的pattern。
如何应用在多元时间序列的提取上? 多个不同的时间序列,的确也会有相同的pattern可以提取
Self-attention *
CNN只是self-attention的特殊情况,RNN也或许也不如self-attention。
- Transformers are RNNs: Fast Autoregressive Transformers with Linear Attention https://arxiv.org/abs/2006.16236
transform
encoder,用来self-attention机制,本质就是对sequence样式的多个输入提取特征
decoder,依然用来self-attention机制,根据之前提取的特征逐个推断需要输出的结果,上一个结果也要作为输入来推断下一个结果。
GAN 似乎也可以用于股票操作
generator 用于生成对股票的操作
discriminator 用于对操作结果回测并得到最终收益
最终目标是,得到可以获得最高收益的操作方法
self-supervised learning 自监督学习*
- BERT 先让模型通过无监督学习,初始化模型参数;之后再通过常规的监督学习训练模型。思路就是先通过无监督学习,让模型先适应数据集的特性,学会做“填空题”,再之后的训练中快速收敛下降。
- GPT
这幅图,震惊到我了。刚开始loss正常下降,随后很长一段时间看似收敛,最后loss又突然大幅下降。
adversarial attack 来自人类的恶意
是否也可以应用在股市中
当你取得了某种可以盈利的模型后,如果别人知道了你的做法,他就会采取新的措施来赚你的钱。
这样可以看作是股市中,来自人类的恶意。
最后可以使用explainable ML 解释模型
在选股模型中,可以解释出什么样的股票走势会给出最高的分数(注意约束条件的设置)
关于领域自适应 Domain Adaptation *
是transfer learning的一种。 感觉对于股票数据来说,非常关键,但目前技术似乎并不能很好的实现。
关于RL强化学习(reinforcement learning)
中间的network 是一样的,依然可以采用之前的多元时间序列network。
是非常强大的学习方法,但是学习的难度和耗时目前是个未知数,以后有机会再做深入研究。是当前时代,最终的学习目标。
Self-attention for graph
图神经网络开山之作:
- node2vec: Scalable Feature Learning for Networks
综述:
- Graph Neural Networks:A Review of Methods and Applications
- A Comprehensive Survey on Graph Neural Networks
经典论文:
- DeepWalk. DeepWalk: Online Learning of Social Representations
- GCN. Semi-supervised Classification witt Graph Convolutional Networks
- GAT. Graph Attention Networks
- GraphSAGE. Inductive Representation Learning on Large Graphs
- https://github.com/thunlp/GNNPapers
顶会论文:
- KDD 数据挖掘方面,有图表示学习
- IEEE
图神经网络路线图
library: 关于GNN的库 gdl.ai
1. spatial-based 基于空间的 GNN
aggregate 利用节点周围的信息更新 下一层节点的方法
readout 把所有node的feature集合起来,代表整个graph
Aggregation 聚合方法 |
Graph name |
解释 |
sum |
NN4G |
原始版本 |
weighted sum |
GAT |
最常用之一 |
GIN 解释了sum的方法比较好的原因
2. spectral-based 基于频谱的 GNN
ChebNet → \rightarrow → GCN → \rightarrow → HyperGCN
关于多元时间序列预测
1. Graph Neural Network-Based Anomaly Detection in Multivariate Time Series
我们提出了新的图偏差网络(Graph Deviation Network, GDN)方法,它学习传感器之间的关系图,并检测与这些模式(pattern)的偏差。我们的方法包括四个主要部分:
1.Sensor Embedding:利用嵌入向量灵活地捕捉每个传感器的独特特征
2.Graph Structure Learning:学习传感器之间的关系,并把它们视作图边
3. Graph Attention-Based Forecasting:根据图中邻近传感器的注意力函数,预测传感器未来的行为
4. Graph Deviation Scoring:图偏差评分识别并解释图中所学习的传感器关系的偏差。
2. Multivariate Time-series Anomaly Detection via Graph Attention Network 基于图注意力网络的多变量时间序列异常检测
该文章的亮点在于从数据矩阵的两个维度考虑了图神经网络的结合,时间维度和特征维度
3. 归图演化神经网络(REGENN)
现有的应用方法通常忽略了数据序列方面与用多个时间序列表示的多变量数据之间的纠缠。相反,这项工作为时间序列预测提出了一种新的神经网络架构,它结合了图形进化的力量和不同数据分布上的深度循环学习。