Nano Hash - криптовалюты, майнинг, программирование

Определение генотипа по данному генетическому алгоритму; GA для инициализации нейронной сети для быстрого и эффективного обучения

Я делаю школьный проект и хотел применить генетические алгоритмы к нейронным сетям. В частности, построение хорошей нейронной сети для данной задачи. Я заметил, что есть некоторые проблемы, связанные с выбором правильных параметров для нейронной сети, чтобы она могла быстро и эффективно обучаться на некоторых данных, и что это в основном сводится к игре в угадайку. Я хотел построить несколько нейронных сетей в стиле генетического алгоритма, чтобы найти наилучшую начальную настройку для классификации заданного набора данных.

Я рассматриваю возможность использования Java библиотеки Neuroph, специально расширяющей реализацию многоуровневого персептрона. В библиотеке есть файл MultilayerPerceptron.java по пути org.neuroph.nnet и у него есть метод createNetwork. Вот реализация этого метода

private void createNetwork(List<Integer> neuronsInLayers, NeuronProperties neuronProperties) {

    // set network type
    this.setNetworkType(NeuralNetworkType.MULTI_LAYER_PERCEPTRON);

    // create input layer
    NeuronProperties inputNeuronProperties = new NeuronProperties(InputNeuron.class, Linear.class);
    Layer layer = LayerFactory.createLayer(neuronsInLayers.get(0), inputNeuronProperties);

    boolean useBias = true; // use bias neurons by default
    if (neuronProperties.hasProperty("useBias")) {
        useBias = (Boolean)neuronProperties.getProperty("useBias");
    }

    if (useBias) {
        layer.addNeuron(new BiasNeuron());
    }

    this.addLayer(layer);

    // create layers
    Layer prevLayer = layer;

    //for(Integer neuronsNum : neuronsInLayers)
    for(int layerIdx = 1; layerIdx < neuronsInLayers.size(); layerIdx++){
        Integer neuronsNum = neuronsInLayers.get(layerIdx);
        // createLayer layer
        layer = LayerFactory.createLayer(neuronsNum, neuronProperties);

        if ( useBias && (layerIdx< (neuronsInLayers.size()-1)) ) {
            layer.addNeuron(new BiasNeuron());
        }

        // add created layer to network
        this.addLayer(layer);
        // createLayer full connectivity between previous and this layer
        if (prevLayer != null) {
            ConnectionFactory.fullConnect(prevLayer, layer);
        }

        prevLayer = layer;
    }

    // set input and output cells for network
    NeuralNetworkFactory.setDefaultIO(this);

    // set learnng rule
    //this.setLearningRule(new BackPropagation(this));
    this.setLearningRule(new MomentumBackpropagation());
    // this.setLearningRule(new DynamicBackPropagation());

    this.randomizeWeights(new NguyenWidrowRandomizer(-0.7, 0.7));
}

Итак, я вижу много факторов, которые можно изменить при построении сети. Я пытаюсь определить, что я мог бы сделать генотипом моего алгоритма.

Таким образом, факторы, которые я вижу, которые я могу настроить, — это, во-первых, количество скрытых слоев и количество нейронов скрытого слоя; размер входного и выходного слоя определяется задачей. Нейронные свойства нейронов в сети (в частности, могут ли разные нейроны иметь разные функции активации?). Возможно, связи между нейронами; все ли нейроны должны быть связаны со всеми остальными в слоях выше и ниже, могут ли некоторые пропускать слой? Скорость обучения используемого правила обучения, возможно, использует другое правило обучения для разных нейронов (почти уверен, что это глупый вопрос).

Итак, в целом, какие факторы нейронной сети, которые можно настроить при начальной настройке, повлияют на скорость и эффективность обучения сети? Я предполагаю, что все нейроны в нейронной сети должны работать одинаково?

РЕДАКТИРОВАТЬ: с помощью некоторого поискового фу я нашел, что я предполагаю, что имя этого типа сети представляет собой композиционный шаблон, создающий сеть CPPN. Основная идея называется нейроэволюция. Алгоритм, реализующий эти идеи, представляет собой нейроэволюцию увеличивающих топологий NEAT. Я больше изучаю эти страницы и ссылки на документы, чтобы попытаться ответить на мои основные вопросы выше. Но вопрос по большей части остается открытым.


Ответы:


1

Есть миллион разных вещей, которые вы можете настроить с помощью нейронных сетей. Они не являются жестким алгоритмом. Все перечисленные вами вещи действительны. Вы можете настроить количество и размеры слоев, вы можете смешивать и сочетать функции активации, вы можете пропускать соединения слоев и настраивать скорость обучения.

Эти вещи называются «гиперпараметрами», чтобы отличать их от обычных параметров, то есть весов и связей нейронной сети. Они устанавливаются путем множества экспериментов, чтобы увидеть, что работает лучше всего.

Однако очень легко случайно переобуться. Чтобы получить NN, который очень хорошо работает с данными обучения или проверки, но совсем не работает с новыми данными. Используйте что-то вроде перекрестной проверки, чтобы разделить данные на разные части и протестировать каждую отдельную часть.

Основными параметрами являются количество и размер слоев, а также параметры регуляризации (например, затухание веса или дрожание).

03.12.2014
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..