Поиск инопланетян с помощью ИИ на GCP

Проект, играющий с открытыми данными из SETI

Они говорят, что лучший способ изучить науку о данных - это что-то создать.

После того, как вы изучите основы обработки данных, кодирования и статистики, используя учебники, сообщения в блогах и, конечно же, MOOC (массовые открытые онлайн-курсы), вам нужно будет работать над интересующим вас проектом. Таким образом, вы сможете использовать то, что вы узнали о различных инструментах и ​​методах, плюс вы сможете заниматься наукой о данных реалистичным и значимым образом, потому что вам нужно фактически найти данные, подготовить их к анализу и, что наиболее важно, в общем, вы должны придумывать вопросы, которые нужно задать.

Что касается меня, это то место, где я недавно провел несколько лет, прорабатывая бесчисленные онлайн-курсы. Я достиг временного состояния усталости от MOOC, и я хотел работать над чем-то долгосрочным и глубоким. Я начал искать интересные данные и в конце концов наткнулся на различные файлы и репозитории GitHub из Института SETI (Поиск внеземного разума).

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

К счастью, после нескольких писем люди из SETI захотели помочь мне и дали понять, что привлечение «гражданских ученых» - это то, чем они хотят больше заниматься в будущем. Меня добавили в их канал Slack, мне позвонили в Skype и дали несколько ссылок на дополнительные наборы данных. Удивительный и свежий подход к работе с энтузиастами данных, с которым я никогда раньше не сталкивался.

Воодушевленный, я затем перешел к обзору всех проектов SETI по ​​привлечению общественности, как прошлых, так и настоящих, чтобы найти идею своего проекта.

SETI и гражданская наука

В январе 2016 года Исследовательский центр SETI в Беркли при Университете Беркли начал программу под названием Прорывное прослушивание, описанную как самый полный на сегодняшний день поиск сообщений инопланетян. Радиоданные в настоящее время собираются Обсерваторией Грин-Бэнк в Западной Вирджинии и Обсерваторией Паркс в Новом Южном Уэльсе, а оптические данные собираются Автоматизированным поиском планет в Калифорнии.

Чтобы привлечь внимание публики, основным методом прослушивания Breakthrough является то, что называется SETI @ Home, при котором программа может быть загружена и установлена, а ваш компьютер использован в режиме ожидания для загрузки пакетов данных и выполнения различных анализов на них.

Помимо этого, они поделились несколькими стартовыми скриптами и некоторыми данными. Скрипты можно найти на GitHub здесь, а архив данных можно найти здесь (хотя большая часть из них находится в формате baseband, который является более ограниченным форматом по сравнению с форматом filterbank, который я пользовался). Обратите внимание на то, что оптические данные от Automated Planet Finder также находятся в другом формате, который называется файлом FITS.

Второй инициативой SETI по ​​привлечению общественности стал проект SETI @ IBMCloud, запущенный в сентябре 2016 года. Он предоставил общественности доступ к огромному объему данных через платформу IBM Cloud. Эта инициатива также сопровождалась отличной коллекцией начальных скриптов, которые все еще можно найти на GitHub здесь. К сожалению, на момент написания этот проект приостановлен, и данные недоступны.

SETI использует глубокое обучение

В сети есть еще несколько источников данных от SETI. Летом 2017 года они провели мероприятие по машинному обучению, в ходе которого участникам были предоставлены смоделированные наборы данных различных размеров вместе с набором слепых тестов. Команда-победитель достигла точности классификации 94,7% с помощью сверточной нейронной сети. Целью этой задачи было попытаться найти новый подход к обнаружению сигналов, а именно выйти за рамки традиционных подходов к анализу сигналов и превратить проблему в задачу классификации изображений после преобразования сигналов в спектрограммы.

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

Обратите внимание, что многие сценарии, написанные SETI и размещенные на Github, используют нестандартный упакованный Python под названием ibmseti.

Работа SETI в области машинного обучения недавно попала в заголовки газет, когда алгоритм глубокого обучения был применен к огромному количеству данных с телескопа Грин-Бэнк, относящихся к радиоисточнику под названием FRB 121102. Предполагалось, что она возникла из карликовой галактики в 3 миллиардах световых лет от нас, поэтому был обнаружен ряд загадочных сигналов, пославших средства массовой информации в безумие, подпитываемое инопланетянами. Однако некоторые детали этих сигналов, такие как их поляризация, предполагают, что они прошли через чрезвычайно мощное магнитное поле, что приводит к гипотезе о том, что они произошли от нейтронной звезды, возможно, около массивной черной дыры.

Более подробную информацию можно найти в статье Zhang, Yunfan Gerry, et al. «Обнаружение и периодичность быстрых посылок радиопередачи 121102: подход машинного обучения». Астрофизический журнал 866.2 (2018): 149.

Все данные из этой работы и ссылку на соответствующую статью можно найти здесь.

Подход ABACAD к поиску инопланетян

Некоторые данные SETI ищут очень быстрые сигналы, то есть сигналы, которые существуют в течение очень короткого периода времени в широком диапазоне частот. Данные из вышеупомянутой статьи о быстрых радиовспышках используют такие данные. Другой вид данных SETI используется для противоположного действия, то есть сигналы в очень узких частотных окнах за более длительные периоды времени. Данные такого рода интересовали меня больше с самого начала, так как казалось, что они с большей вероятностью содержат какой-либо целенаправленный инопланетный сигнал.

Затем я наткнулся на следующую бумагу; Энрикес, Дж. Эмилио и др. «Прорыв в поисках разумной жизни: наблюдения 692 близлежащих звезд в диапазоне 1,1–1,9 ГГц». Астрофизический журнал 849.2 (2017): 104.

В нем такие данные анализируются по 692 звездам с использованием методов, отличных от машинного обучения, при этом большая часть базовых данных используется совместно (с этого момента я буду называть эту работу статьей / проектом «Прорыв 692»). Один из используемых методов известен как подход «ABACAD». Мышление выглядит следующим образом; данные собираются с целевой звезды (первая «А»), затем телескоп перемещается на другую цель («В»). Затем вернемся к A, затем к другой цели, C, еще раз к A, затем к последней, другой цели, D. Идея состоит в том, что если сигнал идет от основной целевой звезды, он будет присутствовать во всех 3 A -сканы. Однако если сигнал имеет наземное происхождение, он, вероятно, появится на всех 6 сканированиях.

Эта статья привела меня к идее использования таких данных в машинном обучении. Нашел свой проект!

Мой проект

Сначала я начал экспериментировать с данными моделирования летнего задания по машинному обучению SETI 2017 года. Сначала я делал это локально (то есть на своем домашнем настольном ПК), а затем вскоре перешел к работе над Kaggle, благодаря их бесплатному хостингу данных и поддержке графического процессора. Я создал записную книжку (известную как ядро на Kaggle), в которой были представлены типичные данные SETI и формат файла банка фильтров, за которым следовал блокнот, использующий глубокое обучение для различения различных типов смоделированных данных (в соответствии с летним испытанием).

Затем я перешел к данным Breakthrough 692 и решил попробовать использовать для этого облачные вычисления, поскольку знал, что обработка массивных файлов набора фильтров, сгенерированных при поиске ABACAD, выиграет от возможностей масштабирования, предлагаемых облачными платформами. К сожалению, я мало знал об этом предмете, и поэтому отложил этот проект до тех пор, пока не завершу отличную специализацию Разработка данных на Google Cloud Platform на Coursera.

После этого я начал собирать код в GCP Datalab (облачная версия Jupyter Notebooks от Google). Я разбил задачу на 4 части,

  1. Создание изображений спектрограмм - преобразование данных банка фильтров в файлы изображений спектрограмм.
  2. Моделирование данных. Это должно было быть похоже на данные, полученные в результате поиска в ABACAD, которые сильно отличались от смоделированных данных из летнего испытания.
  3. Построение модели глубокого обучения - использование смоделированных данных для создания и оценки модели.
  4. Создание прогнозов на основе файлов банка фильтров ABACAD - использование модели для определения сигналов не только по изображению, но и в контексте техники сканирования ABACAD.

Имитация данных

Чтобы смоделировать данные, я придумал несколько категорий (частично основанных на категориях летних испытаний и частично на том, что я мог видеть в результатах Breakthrough 692). Это были; шум, линия, разрезанная линия, колебание и кривая. Я попытался обеспечить соответствие уровней сигналов и фоновых шумов, а также количество пикселей типу данных, представленных в проекте Breakthrough 692. Ниже приведены некоторые примеры каждого из них.

Линия

Виббл

Рубленая леска

Кривая

Шум

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

Построение модели глубокого обучения

Для аспектов глубокого обучения в этом проекте я изначально использовал готовые модели, такие как VGG19 и InceptionNet. Однако позже я пришел к выводу, что они, возможно, были слишком сложными для этого приложения, и поэтому в конце концов использовал структуру Keras для построения простой архитектуры модели (на основе нескольких сообщений в блоге Keras, которые я прочитал). Модель, которую я использовал, кратко описана ниже.

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d_1 (Conv2D)            (None, 188, 188, 32)      9632      
_________________________________________________________________
activation_1 (Activation)    (None, 188, 188, 32)      0         
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 94, 94, 32)        0         
_________________________________________________________________
dropout_1 (Dropout)          (None, 94, 94, 32)        0         
_________________________________________________________________
conv2d_2 (Conv2D)            (None, 90, 90, 32)        25632     
_________________________________________________________________
activation_2 (Activation)    (None, 90, 90, 32)        0         
_________________________________________________________________
max_pooling2d_2 (MaxPooling2 (None, 45, 45, 32)        0         
_________________________________________________________________
dropout_2 (Dropout)          (None, 45, 45, 32)        0         
_________________________________________________________________
conv2d_3 (Conv2D)            (None, 43, 43, 64)        18496     
_________________________________________________________________
activation_3 (Activation)    (None, 43, 43, 64)        0         
_________________________________________________________________
max_pooling2d_3 (MaxPooling2 (None, 21, 21, 64)        0         
_________________________________________________________________
dropout_3 (Dropout)          (None, 21, 21, 64)        0         
_________________________________________________________________
flatten_1 (Flatten)          (None, 28224)             0         
_________________________________________________________________
dense_1 (Dense)              (None, 197)               5560325   
_________________________________________________________________
dropout_4 (Dropout)          (None, 197)               0         
_________________________________________________________________
dense_2 (Dense)              (None, 5)                 990

Затем я обучил это с помощью Оптимизатора RMSprop за 100 эпох, что дало следующие графики точности и потерь:

Этим достигается точность тестовых данных ~ 84%. Ниже приведена матрица путаницы из фазы тестирования,

Прогнозы отдельных изображений

После создания модели мне потребовалось несколько изображений для тестирования. Я взял кое-что из статьи Прорыв 692, чтобы увидеть, что дает эта модель. Ниже приведены несколько изображений с HIP4436, первое - шум,

А вот прогноз модели,

Как видите, он правильно классифицирует это как шум. Далее изображение с присутствующим сигналом,

И предсказание,

Класс «линейка» - явный победитель.

Создание прогнозов на основе файлов банка фильтров ABACAD

Взятие среза из файла набора фильтров и его классификация - это хорошо, но, как упоминалось ранее, SETI использует технику поиска ABACAD, чтобы решить, представляет ли интерес цель. С этой целью я написал `` функцию оценки '' (которую я на самом деле назвал в коде `` детектором пришельцев '', потому что это звучит круче), чтобы делать прогнозы для 6 изображений, соответствующих тому же частотному диапазону из 6 файлов набора фильтров, а затем применяя несколько простых правил, позволяющих определить, интересен ли общий паттерн путем присвоения баллов. Подсчет очков работает следующим образом:

Например, за 6 результатов «шум» начисляется ноль баллов. Фактически, 6 лотов одного и того же сигнала не засчитываются (например, линия-линия-линия-линия-линия-линия). Один тип сигнала в одном или нескольких сканированиях A с другим типом в сканированиях B, C и D получает несколько точек, и максимум назначается типу сигнала в сканированиях 3 A, с B, C и D - это шум (например, колебание-шум-колебание-шум-колебание-шум).

Кажется, это работает довольно хорошо. Например, в статье «Прорыв 692» следующие данные были отмечены как возможные кандидаты (HIP65352) с использованием методов обнаружения сигналов, не связанных с ML,

При использовании глубокого обучения это получает низкий балл, так как сканирование B (второе снизу), которое вы можете просто увидеть на глаз, имеет слабую линию, обнаружено.

Возвращаясь к примеру HIP4436, который использовался ранее, у нас есть следующая коллекция изображений,

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

Новые данные

В приведенных выше примерах используются небольшие файлы данных из статьи Breakthrough 692. Однако SETI открыто делится огромным количеством необработанных данных с публикой. Файлы набора фильтров x6, необходимые для анализа единственной целевой суммы до невероятных 100 ГБ. Я взял эти файлы для HIP4436 и преобразовал первые 3000 частотных срезов из каждого из 6 файлов в файлы изображений PNG.

Затем они были отправлены через модель глубокого обучения, затем через функцию оценки, и, наконец, результаты были сохранены в файле csv. В результате получился крошечный и легко используемый файл для такого небольшого количества частот, но если бы был обработан полный диапазон набора фильтров, в результирующем CSV-файле было бы полмиллиона записей (хотя вы всегда могли сохранить только `` совпадения '', что быть намного меньше).

Чтобы преобразовать результаты в более «дружественный к облаку» формат, я протестировал создание базы данных BigQuery на основе результатов. Это было очень просто и могло быть сделано как часть конвейера обработки, чтобы затем позволить заинтересованным сторонам искать цели с высокими показателями. Например,

SELECT *
FROM `seti_results.seti_results_table`
WHERE score› 0
ORDER BY score DESC

Дает самые результативные цели.

Общий процесс

На изображении ниже показано, как этот процесс может быть помещен в простой конвейер, при этом различные потоки расположены в шахматном порядке, чтобы показать, что обработка данных A1 может начаться, как только сканирование будет завершено (с результатами, которые позже будут объединены с другими 5 потоками один раз. заполняются и вводятся в функцию подсчета очков).

Эти отдельные потоки могут даже обрабатываться 6 разными экземплярами GCP, чтобы значительно ускорить процесс.

Время - деньги

Проблема с данными SETI из того, что я прочитал, похоже, связана с масштабом сдвига. Размер одного файла банка фильтров составляет 17 ГБ, и мы имеем дело с 6 на каждую цель. При частотном разрешении каждого отдельного изображения каждый набор фильтров генерирует 500 000 изображений. Таким образом, каждая цель требует обработки ошеломляющих изображений 3M с помощью модели глубокого обучения.

Я тестировал вещи на экземпляре GCP, в частности, n1-standard-8 (8 виртуальных ЦП, 30 ГБ памяти) с 1x графическим процессором NVIDIA Tesla K80. Используя это, я смог сделать прогнозы на 2999 изображений за сканирование, или 17 994 изображения в целом за ~ 187 секунд. Исходя из этого, прогнозы 3M займут около 8 часов.

Из калькулятора стоимости ниже видно, что, если бы я оставил этот экземпляр включенным навсегда, стоимость составила бы ~ 15 долларов в день. Таким образом, полный набор из 6 файлов набора фильтров может быть обработан этим методом примерно за 5 долларов.

И поскольку это облачные вычисления, эта цена может быть снижена для экономии денег или сокращено время для анализа набора файлов набора фильтров (даже значительно сокращено), если можно допустить более высокие уровни затрат.

Куда дальше?

Поскольку я не являюсь профессиональным исследователем SETI, нет сомнений в том, что все аспекты вышеперечисленного можно улучшить, в том числе:

  1. Моделирование данных - улучшите категории сигналов (формы сигналов, уровни сигналов, шум сигнала и т. д.). Включите более одного сигнала в данное изображение (например, несколько строк, а не одну). Изначально я создал класс изображений под названием «brightpixel», который использовался в летнем испытании машинного обучения. Однако это, похоже, нанесло ущерб моим моделям. Это может быть исследовано дополнительно
  2. Модель глубокого обучения. Попробуйте разные конфигурации модели, разные гиперпараметры, разные методы предварительной обработки и т. д. Тренируйтесь на большем количестве данных и в течение нескольких эпох.
  3. Оценка ABACAD. Разработайте лучшую систему оценки для определения результатов функции ABACAD.
  4. Развертывание модели в масштабе. Используйте GCP, чтобы разрешить автоматический запуск наборов фильтров (x6 из поиска ABACAD) с помощью развернутой модели.
  5. Оптимизация кода. Ускорьте прогнозы, сделав код более эффективным.

Любые советы или предложения от профессионалов будут приветствоваться.

Код этого проекта можно найти здесь.

Спасибо Эмилио Энрикесу, Эндрю Симиону и Стиву Крофту за их помощь в этом, а также за общую открытость SETI, позволяющую гражданским ученым играть с такими интересными данными.