본문 바로가기
Learning-driven Methodology/DL (Deep Learning)

[Deep Learning] 방사형 기저 함수 신경망 (Radial Basis Function Network)

by goatlab 2023. 7. 17.
728x90
반응형
SMALL

방사형 기저 함수 (Radial Basis Function)

 

RBF (방사형 기저 함수)는 값이 원점 또는 특정 지점으로부터의 거리에 따라 달라지는 실수 값 함수이다. 신경망에서 활성화 함수 역할을 하는 기계 학습을 포함하여 다양한 분야에서 널리 사용된다. RBF 활성화 함수는 데이터를 선형적으로 분리할 수 없는 문제에 특히 유용하다. 입력 공간을 데이터가 선형적으로 분리 가능한 고차원 공간으로 매핑할 수 있으므로 복잡한 분류 문제에 대한 강력한 도구가 된다.

 

방사형 기저 함수 신경망 (Radial Basis Function Network)

 

https://www.simplilearn.com/tutorials/deep-learning-tutorial/deep-learning-algorithm

 

방사 신경망은 왕립신호 및 레이더 연구소의 연구원인 브룸헤드 (Broomhead)와 로우 (Lowe)에 의해 1988년 논문에서 처음 공식화되었다. 방사 신경망은 다차원 공간의 보간법에 강력한 능력을 가지고 있는 신경망으로 방사형 구조를 기본으로 하는 네트워크를 가지고 있다. 1개의 은닉층에는 확률 가우시안이 적용되어 있다. 방사 신경망은 은닉층이 1개이며, 유클리디안 거리를 사용한다. 또한 역전파 알고리즘을 사용하고, 안정성 판별이 가능하다는 네 가지의 특징이 있다. 방사 신경망은 보편적인 근사 및 빠른 학습 속도로 인해 다른 신경망과 구별된다. 방사 신경망은 입력 계층, 숨겨진 계층 및 출력 계층의 세 계층으로 구성된 피드 포워드 신경망의 한 유형이다. 이러한 각 계층에는 서로 다른 작업이 존재한다. 계산된 오류가 원하는 값 또는 학습 반복 횟수에 도달하면 방사 신경망 모델의 학습이 종료된다. 그리고 히든 레이어에 특정 수의 노드가 있는 방사 신경망이 선택된다. 이는 가우스 함수 계산 단위의 전달 함수로 사용된다. 경우에 따라 일반적으로 방사 신경망이 다층 퍼셉트론에 비해 훈련 종료에 도달하는 데 더 적은 시간이 필요하다는 것이 관찰된다. 선택된 다층 퍼셉트론 및 방사 신경망은 나중에 새로운 테스트 조건에서 검토된다. 그리고 모델 예측과 실험적 관찰 사이의 일치를 조사하고 두 모델의 결과를 비교한다. 그런 다음 최소 계산 오류를 기반으로 최종 모델이 선택된다.

 

RBFN 작동 방식

 

  • RBFN은 훈련 세트에 대한 입력의 유사성을 측정하여 분류를 수행한다.
  • RBFN에는 입력 레이어에 공급되는 입력 벡터가 있으며 RBF 뉴런 층을 가지고 있다.
  • 이 함수는 입력의 가중 합계를 찾고 출력 계층에는 데이터 범주 또는 클래스당 하나의 노드가 있다.
  • 은닉층의 뉴런은 뉴런 중심으로부터의 거리에 반비례하는 출력을 갖는 가우시안 전달 함수를 포함한다.
  • 신경망의 출력은 입력의 방사형 기반 함수와 뉴런 매개변수의 선형 조합이다.

 

Keras에서 RBFN 함수 구현

 

import keras.backend as K
from keras.layers import Layer

class RBFLayer(Layer):
    def __init__(self, units, gamma, **kwargs):
        super(RBFLayer, self).__init__(**kwargs)
        self.units = units
        self.gamma = K.cast_to_floatx(gamma)

    def build(self, input_shape):
        self.mu = self.add_weight(name='mu',
                                  shape=(int(input_shape[1]), self.units),
                                  initializer='uniform',
                                  trainable=True)
        super(RBFLayer, self).build(input_shape)

    def call(self, inputs):
        diff = K.expand_dims(inputs) - self.mu
        l2 = K.sum(K.pow(diff, 2), axis=1)
        res = K.exp(-1 * self.gamma * l2)
        
        return res

 

Keras model에서 RBFN 함수 사용

 

from keras.models import Sequential

model = Sequential()
model.add(RBFLayer(10, 0.5, input_shape=(1,)))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam')
728x90
반응형
LIST