讲人话系列——what can DNN do ?

2019-08-15  本文已影响0人  张凡宇

概述

神经网络大火的今天,各种花式模型层出不穷,有些默认的说法如下:1.DNN理论上有无限拟合能力,2.DCN(某推荐场景下的网络)有高阶特征抽取能力,可以自动提取特征。针对1有理论证明(虽然没咋看懂)但是个人认为,这个理论并不能证明DNN在各种任务上的有效性,因为任务不光涉及模型本身的能力,还涉及到优化、样本分布等多方面因素,能否找到足够泛化的模型参数可能并没有想的这么乐观。对于2,我只能说我没有看懂这个模型(对于他高阶拟合的说法不敢苟同),从神经网络开始到现在,不乏大量搞复杂的网络发出来的文章,个人感觉证明有效性上不具有说服力。

ps:这里聊下自己对新模型的看法

因为自己比较菜,觉得给一个简单的任务类型,自己无法判断dnn是否能进行拟合(各位看官们也可以自行检测一下,自己对DNN的理解是否那么深刻。),所以就有了这篇文章。

问题描述

给定各类简单任务,判断dnn是否有足够的拟合能力。任务类型如下:

以上每一个实验,我会给出数据集逻辑和模型结构,请各位也帮忙做一个评审,看看做法是否合理。

实验细节

乘法

实验1

layer_1 = tf.concat([a,b,c],1) 
layer_2 = tf.layers.dense(layer_1,n_hidden1,activation=tf.nn.leaky_relu)
y_ = tf.layers.dense(layer_2,1,activation=tf.nn.leaky_relu)
mse = tf.losses.mean_squared_error(y,y_)
optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate)
train_op = optimizer.minimize(mse)

实验2

layer_1 = tf.concat([a,b,c],1) 
layer_2 = tf.layers.dense(layer_1,n_hidden1,activation=tf.nn.leaky_relu)
y_ = tf.layers.dense(layer_2,1,activation=tf.nn.leaky_relu)
mse = tf.losses.mean_squared_error(y,y_)
optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate)
train_op = optimizer.minimize(mse)

实验3

layer_1 = tf.concat([a,b,c],1) 
layer_2 = tf.layers.dense(layer_1,n_hidden1,activation=tf.nn.leaky_relu)
y_ = tf.layers.dense(layer_2,1,activation=tf.nn.leaky_relu)
mse = tf.losses.mean_squared_error(y,y_)
optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate)
train_op = optimizer.minimize(mse)

序列计数0

实验1

layer_1 = num_seq
layer_2 = tf.layers.dense(layer_1,n_hidden1,activation=tf.nn.sigmoid)
layer_3 = tf.layers.dense(layer_2,n_hidden2,activation=tf.nn.sigmoid)
y_ = tf.layers.dense(layer_3,1,activation=tf.nn.sigmoid)
mse = tf.losses.mean_squared_error(y,y_) 
optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate)
train_op = optimizer.minimize(mse)

实验2

layer_1 = num_seq
layer_2 = tf.layers.dense(layer_1,n_hidden1,activation=tf.nn.relu)
layer_3 = tf.layers.dense(layer_2,n_hidden2,activation=tf.nn.relu)
y_ = tf.layers.dense(layer_3,1,activation=tf.nn.relu)
mse = tf.losses.mean_squared_error(y,y_) 
optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate)
train_op = optimizer.minimize(mse)

标准差

layer_1 = tf.concat([a,b,c],1) 
layer_2 = tf.layers.dense(layer_1,n_hidden1,activation=tf.nn.leaky_relu)
y_ = tf.layers.dense(layer_2,1,activation=tf.nn.leaky_relu)
mse = tf.losses.mean_squared_error(y,y_)
optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate)
train_op = optimizer.minimize(mse)

最大值

layer_1 = tf.concat([a,b,c],1) 
layer_2 = tf.layers.dense(layer_1,n_hidden1,activation=tf.nn.leaky_relu)
y_ = tf.layers.dense(layer_2,1,activation=tf.nn.leaky_relu)
mse = tf.losses.mean_squared_error(y,y_)
optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate)
train_op = optimizer.minimize(mse)

一点总结

上一篇 下一篇

猜你喜欢

热点阅读