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

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

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

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

Фон

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

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

Понимание преобразований Фурье

Преобразования Фурье, названные в честь французского математика Жана-Батиста Жозефа Фурье, являются фундаментальным инструментом в математической физике и технике.

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

Думайте о преобразованиях Фурье как о Шерлоке Холмсе в математике, разбивая сложные сигналы на более простые синусоидальные подсказки.

Преобразования Фурье в действии: реальные приложения

Преобразования Фурье имеют широкий спектр применений в науке о данных и машинном обучении:

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

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

Здравоохранение.Преобразование Фурье используется в медицинских технологиях визуализации, таких как МРТ и компьютерная томография, для восстановления изображений из необработанных данных. Их также можно использовать для анализа биологических сигналов, таких как сердцебиение или мозговые волны, для выявления закономерностей или аномалий, которые могут иметь решающее значение при диагностике различных состояний здоровья.

Python и преобразования Фурье

Python, универсальный язык программирования с богатой экосистемой библиотек, обеспечивает надежную поддержку преобразований Фурье. Такие библиотеки, как NumPy и SciPy, предлагают функции для вычисления преобразований Фурье и управления данными в частотной области, что делает их бесценными инструментами для обработки сигналов и анализа данных.

Функция окна

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

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

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

Быстрое преобразование Фурье (БПФ)

Быстрое преобразование Фурье (БПФ) — это алгоритм, который вычисляет дискретное преобразование Фурье (ДПФ) последовательности или его обратное. Анализ Фурье преобразует сигнал из его исходной области (часто временной или пространственной) в представление в частотной области и наоборот.

ДПФ получается путем разложения последовательности значений на составляющие с разными частотами. Эта операция полезна во многих областях, но вычисление ее непосредственно из определения часто слишком медленно, чтобы быть практичным. БПФ быстро вычисляет такие преобразования, разлагая матрицу ДПФ на произведение разреженных (в основном нулевых) множителей. В результате ему удается уменьшить сложность вычисления ДПФ с O(n²), которое было бы получено, если бы кто-то наивно применил определение ДПФ, до O(n log n), где n — размер данных.

Экономия времени может быть огромной, особенно для длинных последовательностей данных, где временная сложность становится особенно очевидной. Это делает алгоритм БПФ очень ценным для широкого круга приложений, таких как цифровая обработка сигналов, решение дифференциальных уравнений в частных производных, алгоритмы быстрого умножения больших целых чисел и даже в науке о данных и машинном обучении для таких алгоритмических компонентов, как анализ основных компонентов.

В Python БПФ реализован в таких библиотеках, как NumPy и SciPy, которые предоставляют функции np.fft.fft() и scipy.fft.fft() соответственно. Эти библиотеки широко используются в научном сообществе Python, поскольку они предоставляют эффективные и удобные интерфейсы для таких задач, как вычисление БПФ.

При использовании Python для анализа данных или обработки сигналов вам не обязательно понимать внутреннюю работу алгоритма БПФ. Однако полезно знать, что когда вы вызываете np.fft.fft(), вы используете быстрый и эффективный алгоритм для вычисления преобразования Фурье ваших данных. Это позволяет быстро и эффективно анализировать частотные компоненты ваших данных, что может быть невероятно ценным для многих задач обработки данных и машинного обучения.

Приложение с данными о солнечных пятнах

Чтобы проиллюстрировать применение преобразований Фурье в Python, давайте рассмотрим реальный набор данных: набор данных Sunspots. Этот набор данных содержит ежемесячные подсчеты количества наблюдаемых солнечных пятен — явления, которое наряду с шумом демонстрирует как высокочастотные, так и низкочастотные компоненты. Преобразования Фурье могут помочь нам идентифицировать эти компоненты и понять основные закономерности в данных.

В предоставленном коде мы сначала применяем оконную функцию к данным, чтобы уменьшить спектральную утечку. Затем мы используем БПФ для преобразования данных о солнечных пятнах во временной области в частотную область. Это позволяет нам определить доминирующие частоты активности солнечных пятен.

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

Рисунок 1 показывает исходный сигнал, который представляет собой среднемесячное общее количество солнечных пятен с течением времени. Это исходные данные, которые мы анализируем.

import numpy as np
import pandas as pd
import plotly.graph_objects as go

# Load Sunspots data
url = 'http://www.sidc.be/silso/INFO/snmtotcsv.php'
df = pd.read_csv(url, delimiter=';', header=None)

# Rename columns
df.columns = ['Year', 'Month', 'Date_in_fraction_of_year', 'Monthly_Mean_Total_Sunspot_Number', 'Monthly_Mean_Standard_Deviation', 'Number_of_Observations', 'Definitive_Provisional_Indicator']

# Create 'Date' column
df['Date'] = pd.to_datetime(df[['Year', 'Month']].assign(DAY=1))

# Select 'Monthly Mean Total Sunspot Number'
y = df['Monthly_Mean_Total_Sunspot_Number'].values

# Compute the Fast Fourier Transform
yf = np.fft.fft(y)

# Compute the frequencies
t = np.arange(y.size)
xf = np.fft.fftfreq(t.size, t[1] - t[0])

# Create the sunspots data plot
#This shows the original signal, which is the monthly mean total sunspot number over time. This is the raw data that we are analyzing.
fig1 = go.Figure()
fig1.add_trace(go.Scatter(x=df['Date'], y=y, mode='lines', name='Original Signal'))
fig1.update_layout(title='Sunspots data', xaxis_title='Date', yaxis_title='Monthly Mean Total Sunspot Number')

Много пиков разной высоты — какой беспорядок. Идеально подходит для нашего друга преобразования Фурье.

Рисунок 2 показывает преобразование Фурье исходного сигнала. Это преобразует наш исходный сигнал, основанный на времени, в сигнал, основанный на частоте. Это позволяет нам видеть разные частоты (или циклы), из которых состоит исходный сигнал. Ось X представляет частоту (как часто конкретный цикл повторяется в единицу времени), а ось Y представляет амплитуду (насколько силен этот цикл в исходном сигнале).

# Create the spectrum plot
#This shows the Fourier Transform of the original signal. The Fourier Transform is a mathematical technique that transforms our original time-based signal into a frequency-based one. This allows us to see the different frequencies (or cycles) that make up the original signal. The x-axis represents the frequency (how often a particular cycle repeats per unit of time), and the y-axis represents the amplitude (how strong that cycle is in the original signal).
fig2 = go.Figure()
fig2.add_trace(go.Scatter(x=xf[:y.size//2], y=2.0/y.size * np.abs(yf[0:y.size//2]), mode='lines', name='Fourier Transform'))
fig2.update_layout(title='Fourier Transform with Hamming Window', xaxis_title='Frequency', yaxis_title='Amplitude')

Совсем другое, да? Пик, который вы видите здесь, представляет наиболее доминирующий цикл в данных. Давайте представим это по-другому, взглянув немного ближе на сам ряд Фурье.

Рисунок 3a показывает несколько отдельных синусоид, составляющих исходный сигнал. Каждая линия на этом графике представляет собой синусоиду определенной частоты и амплитуды. Когда все составляющие синусоидальные волны складываются вместе, они восстанавливают исходный сигнал. Ось x представляет время, а ось y представляет амплитуду синусоиды в каждый момент времени. Этот график, по сути, представляет собой способ визуализации данных предыдущего графика (Рисунок 2: преобразование Фурье) во временной области. Каждая составляющая частота является строительным блоком исходного сигнала.

# Plot the first few Fourier components
#This shows shows the individual sine waves that make up the original signal. Each line in this plot represents a sine wave of a particular frequency and amplitude. When all these sine waves are added together, they reconstruct the original signal. The x-axis represents time, and the y-axis represents the amplitude of the sine wave at each point in time. This plot is essentially a way of visualizing the data from the previous graph (the Fourier Transform) in the time domain. Each component frequency is a building block of the original signal.
#Play with this graph to see how as N increases, the cumulative sum of that number of Fourier components approaches the shape of our original plot.
N = 7  # number of components to plot
fig3a = go.Figure()

# Create a zero-filled array for the cumulative sum of the components
y_cumulative = np.zeros_like(y)

for i in range(1, N+1):
    # Get the i-th Fourier component
    amplitude_i = np.abs(yf[i]) / y.size
    phase_i = np.angle(yf[i])
    freq_i = xf[i]
    
    # Compute the i-th component and add it to the cumulative sum
    y_i = amplitude_i * np.cos(2 * np.pi * freq_i * t + phase_i)
    y_cumulative += y_i
    
    # Plot the cumulative sum of the components so far
    fig3a.add_trace(go.Scatter(x=df['Date'], y=y_cumulative, mode='lines', name=f'Cumulative sum of first {i} Fourier components'))

fig3a.update_layout(title='Cumulative sum of first N Fourier components', xaxis_title='Date', yaxis_title='Monthly Mean Total Sunspot Number')
# As we add more component frequencies, the signal becomes more complex.
# Each component frequency represents a sine wave of a particular frequency and amplitude.
# When all these sine waves are added together, they form the original signal.
# Therefore, as we add more components, we get closer to the original signal.
fig3a.show()

# Compute the inverse FFT to reconstruct the original signal
#This shows the original signal and the reconstructed signal overlaid on top of each other. The reconstructed signal is obtained by applying the inverse Fourier Transform to the transformed signal from Figure 2. This process converts the frequency-based signal back into a time-based signal. The goal here is to check how well we can reconstruct the original signal from its Fourier Transform. If the reconstruction is good, the original and reconstructed signals will overlap significantly. 
y_reconstructed = np.fft.ifft(yf)

Связь между Рис. 2 и Рис. 3a заключается в том, что пики на преобразовании Фурье (Рис. 2) представляют собой доминирующие циклы активности солнечных пятен, и эти циклы представляют собой синусоидальные волны, которые суммируются на Рисунке 3a для аппроксимации исходного сигнала. Чем сильнее пик на Рисунке 2 (т. е. чем выше его амплитуда), тем значительнее этот цикл в исходном сигнале и, следовательно, тем больше он вносит вклад в сумму на Рисунке 3а. .

Вы, возможно, заметили, что форма графика кумулятивной суммы 1-й компоненты Фурье намного проще, чем у первых 7 компонентов Фурье, и на то есть веские причины. По мере увеличения N кумулятивная сумма этого количества компонентов Фурье приближается к форме нашего исходного графика (Рисунок 1). Покажем это более подробно.

Рисунок 3b показывает кумулятивную сумму первых 2 и 200 компонентов вместе с исходным графиком:

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

Следующий код Python вычисляет обратное преобразование Фурье и накладывает реконструированный сигнал на исходный сигнал, а затем отображает это на Рис. 4. Целью здесь является оценка точности реконструкции. Если преобразование Фурье и его обратное вычисление были выполнены правильно, исходный и реконструированный сигналы будут перекрываться.

Чтобы продемонстрировать это, мы делаем исходный сигнал пунктирной синей линией, а реконструированный сигнал — непрозрачным красным. Таким образом, если они полностью перекрываются (как и должно быть при идеальной реконструкции), результирующий график будет фиолетовым (где красный и синий перекрываются), а красный (реконструированный) сигнал виден сквозь промежутки в штрихах исходного сигнала. Другими словами, несмотря на отображение двух разных графиков, он должен отображаться как один график с фиолетовой и красной пунктирной линией. Это просто для демонстрации эффективности реконструкции.

# Create the overlay plot
fig4 = go.Figure()
#We're making the original signal a dashed blue line and the reconstructed signal an opaque red, so if they are totally overlapping (as they should be) the resulting graph will be purple (where the red and blue overlap) with the red (reconstructed) signal apparent through the gaps in the original signal's dashes. This is just to demonstrate how clearly they overlap.
fig4.add_trace(go.Scatter(x=df['Date'], y=y, mode='lines', name='Original Signal', line=dict(color='blue', dash='dash')))
fig4.add_trace(go.Scatter(x=df['Date'], y=y_reconstructed.real, mode='lines', name='Reconstructed Signal', line=dict(color='red', width=2), opacity=0.5))
fig4.update_layout(title='Original vs Reconstructed Signal', xaxis_title='Date', yaxis_title='Monthly Mean Total Sunspot Number')

Когда двое становятся одним, мы знаем, что мы закончили. Идеальная реконструкция.

В этом примере мы продемонстрировали, как использовать оконную функцию и БПФ в Python для анализа реальных данных. Этот подход можно применять к широкому кругу задач анализа данных, обеспечивая ценную информацию о частотных компонентах сложных сигналов.

Преобразования Фурье в машинном обучении: позиционные вложения в НЛП

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

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

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

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

Для наших целей мы просто посмотрим на это с высокого уровня, чтобы продемонстрировать преобразование Фурье в работе в реальном приложении ML.

Позиционные встраивания: пошаговое руководство по коду Python

Давайте посмотрим, как мы можем реализовать эту концепцию в самой базовой форме в Python. Мы будем использовать библиотеку numpy для математических операций и plotly для визуализации.

Сначала импортируем необходимые библиотеки:

import numpy as np
import plotly.graph_objects as go

Затем мы определяем функцию для генерации позиционных кодировок:

def positional_encoding(position, d_model):
    # Initialize a positional encoding matrix
    pos_enc = np.zeros((position, d_model))
    
    # For each position of the sentence
    for pos in range(position):
        # For each dimension of the d_model
        for i in range(d_model):
            # Compute the positional encoding
            pos_enc[pos, i] = np.sin(pos / (10000 ** ((2 * i) / d_model)))
            
    return pos_enc

В приведенной выше функции position — это позиция слова в предложении, а d_model — размерность вложений. 10000 — это гиперпараметр, который можно настроить.

Теперь давайте создадим позиционные кодировки для предложения с 10 словами и d_model из 16:

pos_encodings = positional_encoding(10, 16)

Наконец, давайте визуализируем эти кодировки с помощью plotly:

fig5 = go.Figure(data=go.Heatmap(z=pos_encodings, colorscale='Viridis'))
fig5.update_layout(title='Positional Encodings', xaxis_title='Embedding Dimensions', yaxis_title='Word Positions')
fig5.show()

Это создаст тепловую карту, где ось X представляет размеры встраивания, а ось Y представляет позиции слов.

Рисунок 5 представляет собой тепловую карту, которая визуализирует позиционные кодировки, сгенерированные методом на основе преобразования Фурье. Ось X представляет размеры вложений, а ось Y представляет позиции слов в предложении.

Каждая ячейка на тепловой карте соответствует определенной позиции слова (ось Y) и определенному размеру встраивания (ось X). Цвет ячейки указывает значение позиционного кодирования для этой конкретной комбинации позиции слова и размера внедрения.

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

Подход позиционного кодирования на основе Фурье можно применять и к другим задачам, где важен порядок элементов. Например, при анализе временных рядов, где важен порядок точек данных, или при создании музыки, где важна последовательность нот.

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

Расширяя горизонты: универсальность преобразований Фурье в машинном обучении

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

Вот несколько заслуживающих внимания исследований, демонстрирующих широкую применимость преобразований Фурье в машинном обучении:

  1. Новый метод определения концентрации компонентов электролита в литий-ионных элементах с использованием инфракрасной спектроскопии с преобразованием Фурье и машинного обучения: в этом исследовании представлен новый метод определения неизвестных концентраций основных компонентов в типичных электролитах литий-ионных аккумуляторов. Метод использует инфракрасную спектроскопию с преобразованием Фурье и машинное обучение, чтобы сопоставить характеристики инфракрасного спектра с преобразованием Фурье (FTIR) неизвестного электролита с теми же характеристиками базы данных спектров FTIR с известными составами. Это может быть захватывающим примером, демонстрирующим использование преобразований Фурье в технологиях хранения энергии и аккумуляторов.
  2. Оценка методов машинного обучения с функциями преобразования Фурье для классификации опухолей яичников на основе ультразвуковых изображений: в этой работе оцениваются различные известные системы машинного обучения (МО) для автоматической классификации опухолей яичников по ультразвуковым изображениям. Для каждого случая пациента и ультразвукового изображения его входные характеристики были предварительно извлечены с использованием дескрипторов Фурье, вычисленных в области интереса (ROI).
  3. Анализ ЭЭГ лобных долей в режиме реального времени с использованием методов машинного обучения для обнаружения психического стресса: в этом исследовании анализ спектра ЭЭГ лобных долей применяется для обнаружения психического стресса. Первоначально быстрое преобразование Фурье (БПФ) применяется в качестве этапа выделения признаков для измерения плотности мощности всех полос для лобной доли.
  4. Визуализация инфракрасной спектроскопии с преобразованием Фурье тканей толстой кишки: оценка значения полос растяжения амида I и C – H в диагностических приложениях с помощью машинного обучения: в этом исследовании используется инфракрасная спектроскопия с преобразованием Фурье (FTIR) тканей биопсии толстой кишки при пропускании в сочетании с машинным обучение классификации различных стадий злокачественных новообразований толстой кишки.

Эти примеры демонстрируют широкий спектр применений преобразований Фурье в машинном обучении. От его роли в решениях для хранения энергии и биотехнологии, таких как определение компонентов электролита в литий-ионных батареях, до его значительного вклада в сектор здравоохранения, включая медицинскую визуализацию, мониторинг психического здоровья и диагностику рака. Использование преобразования Фурье для обработки ультразвуковых изображений для классификации опухолей яичников, анализа ЭЭГ в реальном времени для обнаружения психического стресса и инфракрасной спектроскопии для диагностики рака толстой кишки — все это подчеркивает его важность и адаптируемость в различных дисциплинах и отраслях.

Обзор

Давайте подытожим то, что мы рассмотрели.

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

Python и преобразования Фурье. Мы рассказали, как Python с такими библиотеками, как NumPy и SciPy, обеспечивает надежную поддержку преобразований Фурье. Мы также обсудили другие аспекты программирования с использованием преобразований Фурье, в том числе:

  • Функция окна. Мы объяснили концепцию функции окна в обработке сигналов, которая используется для сужения конца сигнала или набора данных, чтобы смягчить эффект спектральной утечки.
  • Быстрое преобразование Фурье (БПФ). Мы обсудили быстрое преобразование Фурье (БПФ) — алгоритм, эффективно вычисляющий дискретное преобразование Фурье (ДПФ) последовательности или его обратное.

Применение с данными о солнечных пятнах. Мы продемонстрировали применение преобразования Фурье на реальном наборе данных: наборе данных о солнечных пятнах. Мы применили к данным оконную функцию, чтобы уменьшить спектральную утечку, использовали БПФ для преобразования данных о солнечных пятнах во временной области в частотную область и реконструировали исходный сигнал.

Преобразования Фурье в НЛП — позиционное кодирование. Мы показали, как можно использовать преобразования Фурье для создания позиционных вложений в обработке естественного языка (НЛП).

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

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

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

Прощальные мысли

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

Если вам нравится погружаться в тонкости решения проблем ML так же, как и мне, рассмотрите возможность подписаться на меня в Medium и LinkedIn. Давайте вместе пройдем через лабиринт ИИ, по одному умному решению за раз.

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