В современной медицине всё больше возрастает роль компьютерной диагностики. Особенно ярко это выявляется в случаях, когда необходимо произвести классификацию большого количества разнородных данных, чтобы выявить те или иные общие признаки для, например, разделения больных на группы. Искусственные нейронные сети изначально хорошо себя зарекомендовали в таких областях применения.
Существенную роль при анализе медикобиологической информации играет её особенности: описательный характер, использование формализмов, подверженность крайней вариабельности. Данные, даже описанные с помощью чисел, в большинстве случаев не могут быть хорошо упорядочены и классифицируемы, так как изменяются в зависимости от клинических традиций различных школ, геосоциальных особенностей регионов и даже отдельных учреждений, а также от времени.
Все задачи, решаемые человеком, с позиций нейроинформационных технологий можно условно классифицировать на две группы:
1. Задачи, имеющие известный и определенный набор условий, на основании которого необходимо получить четкий, точный, недвусмысленный ответ по известному и определенному алгоритму.
2. Задачи, в которых не представляется возможным учесть все реально имеющиеся условия, от которых зависит ответ, а можно лишь выделить приблизительный набор наиболее важных условий. Так как часть условий при этом не учитывается, ответ носит неточный, приблизительный характер, а алгоритм нахождения ответа не может быть выписан точно.
Для решения задач первой группы с большим успехом можно использовать традиционные компьютерные программы. Как бы ни был сложен алгоритм, ограниченность набора условий (входных параметров) дает возможность составления алгоритма решения и написания конкретной программы, решающей данную задачу.
При решении задач второй группы применение нейротехнологии оправдывает себя по всем параметрам, при выполнении, однако, двух условий: во-первых, наличия универсального типа архитектуры и единого универсального алгоритма обучения (отсутствие необходимости в их разработке для каждого типа задач), во-вторых, наличия примеров (предыстории, фиксированного опыта), наосновании которых производится обучение нейронных сетей.
Практически вся медицинская и биологическая наука состоит именно из задач, относящихся ко второй группе, и в большинстве этих задач достаточно легко набрать необходимое количество примеров для выполнения второго условия. Это задачи диагностики, дифференциальной диагностика, прогнозирования, выбора стратегии и тактики лечения и др. Медицинские задачи практически всегда имеют несколько способов решения и «нечеткий» характер ответа, совпадающий со способом выдачи результата нейронными сетями.
Нейронные сети часто используются для классификации в области компьютерной диагностики. Создание оптимальной нейронной сети включает:
1) выбор активационной функции нейронов
скрытого слоя;
2) выбор топологии сети;
3) выбор методао бучения;
4) обучение сети.
Известным ограничением развития нейросетевых алгоритмов следует признать высокие вычислительные затраты на реализацию таких методов. К традиционным способам решения данной проблемы относят организацию параллельных ираспределенных вычислений наспециализированном аппаратном обеспечении.
Описание технологии CUDA
Особенностью оборудования, поддерживающего технологию CUDA (Compute Unified Device Architecture – унифицированная архитектура вычислительного устройства), является возможность обеспечивать на порядок большую (по сравнению с кластерами) пропускную способность при работе с памятью.
В графических ускорителях NVIDIA, начиная с восьмой серии, реализована архитектура параллельных вычислений CUDA, которая предоставляет специализированный программный интерфейс для не графических вычислений.
Логически графический процессор с поддержкой CUDA можно рассматривать как набор многоядерных процессоров. Основными вычислительными блоками таких видеочипов являются мультипроцессоры, которые состоят из восьми ядер, нескольких тысяч 32-битных регистров, 16 Кбайт общей памяти, текстурного и константного кэшей.
До официального появления технологии CUDA проводились эксперименты по использованию графических карт настольных систем для реализации потоковых вычислений. Так, с помощью графических программно-аппаратных интерфейсов и представления данных в качестве массивов текстур, удалось добиться троекратного увеличения производительности в экспериментах. Стоит отметить также и одно из ключевых достоинств технологии CUDA – отсутствие необходимости в разработке программ следовать графическим «метафорам» – типам данных и принципам построения вычислений, характерным исключительно для обработки вершин и пикселей при построении кадра.
Реализация нейронной сети с сочетанием CUDA и OpenMP и параллелизма центральных процессоров на уровне языка программирования и программно-аппаратного интерфейса создает еще один уровень прироста производительности.
Основным источником информации по применению данной технологии может послужить портал разработчика компании NVIDIA, где можно найти как наиболее свежую версию программных библиотек, так и основную информацию о непосредственном внедрении графических процессоров для общих расчетов в своём проекте.
Несмотря на большую информативность портала компании NVIDIA, непосредственные оценки производительности и некоторые тонкости применения графических процессоров для задач численного интегрирования, опирались на работы.
Таким образом, применение описанных выше алгоритмов в связке друг с другом имеет право на существование и возможность развития.
Алгоритм обучения на графическом процессоре
Для того, чтобы в полной мере использовать возможности параллельной системы, которой является видеокарта, алгоритм настройки нейросети должен быть соответствующим образом преобразован. Для уменьшения числа обменов с глобальной памятью видеокарты и увеличения отношения объема вычислений к объему загружаемых из нее данных по возможности все массивы данных должны быть записанными в двумерные массивы и обрабатываться на двумерной решетке.
Естественно, что если число обучающих примеров очень велико, то эти матрицы придется разбивать на блоки. В этом случае пакетная обработка обучающей выборки позволяет снизить частоту обменов между центральным и графическим процессорами, которая приводит к существенному замедлению всего алгоритма. В результате этого при прямом распространении сигнала операция умножения матрицы весов на вектор, получаемый с входа нейронов, заменятся на операцию перемножения двух матриц.
Наконец, изменив порядок вычислений, выделим ядра потоковой обработки, выполняющиеся на видеокарте, по возможности преобразуя схему вычислений так, чтобы во время обработки данных оперировать блоками нужного размера и обеспечить загруженность процессорных элементов, способную скрыть задержку при доступе к глобально памяти видеокарты. Это также позволит ускорить обработку за счет такой особенности параллелизма видеокарты, как векторность вычислений на графической карте.
Основным приемом перевода последовательного алгоритма в параллельный для реализации в среде CUDA является замена циклов параллельно выполняющимися командами вида SIMD (Single Instruction, Multiple Data – множественный набор данных, обрабатываемых одной инструкцией). При этом ускоряется выполнение операций умножения векторов и матриц. Вначале нужно разбить задачу на вычислительные блоки и потоки, после чего, если необходимо, внести изменения в способ их взаимодействия и записать алгоритм в среде CUDA. Помимо этих преобразований при реализации алгоритмов, рассмотренных в настоящей работе были использованы специальные приемы работы с различными видами видеопамяти:
• использование общей памяти видеокарты для хранения часто используемых значений;
• планирование порядка исполнения вычислительных потоков, чтобы избежать невыровненного и непоследовательного (некогерентного) доступа к глобальной памяти видеокарты;
• использование текстур для осуществления невыровненного доступа к глобальной памяти;
• изменение порядка обработки данных во избе жание конфликтов доступа к отдельным участкам памяти.