《Weight Agnostic Neural Networks》(权重无关网络)论文简介

本文探讨了一种不同于传统调参的神经网络研究方法,通过固定权重并专注于网络架构设计,以实现特定功能的最佳表现。灵感源自生物本能,论文提出了一套算法流程,用于创建和优化最小网络,直至达到性能极限。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

https://weightagnostic.github.io/
https://github.com/google/brain-tokyo-workshop/tree/master/WANNRelease

现在大部分关于神经网络性能的研究关注于网络参数的优化上,即如何调参。这篇论文给我们提供了一个不一样的思路:设计网络的最优架构。

论文的想法启发于生物学:很多生物在刚出生时(没有经过大量的练习),便具有某些特定的能力,如逃避捕食者等。因此,对于某些特定的功能,设定特定的神经网络架构即可解决。

论文通过给整个网络部署一个相同的权重,来消除权重对网络性能的影响。然后再改变权重的值,观察该网络架构在不同权重下所能取得的最好结果。

完整的论文算法步骤如下图所示: 1) 创建多个最小网络;2)在最小网络上分配不同的权重;3)根据网络性能和复杂度对最小网络进行排序;4)在取得最好结果的最小网络进行迭代(包括插入节点、增加链接和改变激活函数等)。重复步骤2)到4)直到迭代没有性能的提升时停止。

在这里插入图片描述

WANN(Weight Agnostic Neural Networks)算法是一种无需调整权重的神经网络算法。它的主要思想是构建一种通用的神经网络结构,使得该结构在不同的任务上都能够表现良好,而无需针对每个任务进行权重调整。该算法已经被应用于许多不同领域,例如强化学习、机器人控制和图像分类等。 以下是WANN算法的Matlab实现示例: ```matlab function [y] = WANN(x) % WANN algorithm implementation in Matlab % x: input data % y: network output % define network structure num_inputs = size(x, 1); num_outputs = 1; num_hidden_layers = 2; num_neurons_per_layer = 5; % initialize weights weights = ones(1, num_neurons_per_layer * num_hidden_layers + ... num_neurons_per_layer * num_inputs + num_neurons_per_layer * num_outputs); % evaluate network y = evaluate_network(x, weights, num_inputs, num_outputs, ... num_hidden_layers, num_neurons_per_layer); end function [y] = evaluate_network(x, weights, num_inputs, num_outputs, ... num_hidden_layers, num_neurons_per_layer) % evaluate the network with given weights % extract weights for each layer start_index = 1; end_index = num_neurons_per_layer * num_inputs; input_weights = reshape(weights(start_index:end_index), ... num_neurons_per_layer, num_inputs); start_index = end_index + 1; end_index = end_index + num_neurons_per_layer * num_hidden_layers; hidden_weights = reshape(weights(start_index:end_index), ... num_neurons_per_layer, num_hidden_layers); start_index = end_index + 1; end_index = end_index + num_neurons_per_layer * num_outputs; output_weights = reshape(weights(start_index:end_index), ... num_outputs, num_neurons_per_layer); % evaluate network hidden_layer = relu(input_weights * x); for i = 1:num_hidden_layers-1 hidden_layer = relu(hidden_weights(:, i) * hidden_layer); end y = output_weights * hidden_layer; end function [y] = relu(x) % rectified linear unit activation function y = max(0, x); end ``` 这里的实现是一个非常简单的WANN网络,只有两个隐藏层,每个隐藏层有5个神经元。权重初始化为1,激活函数使用ReLU。你可以根据自己的需求进行修改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值