본문 바로가기
컴퓨터공학 & 정보통신

[인공지능] 인공신경망 (ANN, Artificial Neural Network) 이해하기

by TaeGyeong Lee 2025. 10. 11.

개요 

인공지능의 가장 기본적인 개념 중 하나인 인공신경망을 설명한 글입니다. 관련 개인 프로젝트를 한지 몇 년이 되었는데, 개념 조차 모른 채 프로젝트를 해왔습니다. 참으로 부끄러운 일입니다. 

최대한 수식을 넣지 않고 서술하였습니다. 

 

구성 

인공신경망을 구성하는 요소입니다. 

노드 (Node) 

신경망을 구성하는 가장 작은 단위입니다. 0.12 는 각 노드가 가지고 있는 값 (== Activation) 입니다. 

다른 노드로부터 입력 신호 (0.90, 0.81, 0.28) 을 받아 어떠한 계산을 통해 출력한 값 0.12을 가지는 노드가 있다고 가정합시다. 이 연결 집합이 뉴런 (Neuron)입니다. 

가중치 (Weight) 

위 도식에서 Weight0, Weight1 .. 으로 출력 값을 계산할 때 사용하는 값입니다. 학습을 하는 동안 가중치는 계속 바뀝니다. 

신경망 초기화(Initialization) 시, 가중치는 "일반적"으로 랜덤 구성됩니다. 모든 가중치가 0 또는 동일한 값으로 초기화되면 학습에 문제가 발생합니다.  

 

레이어 (Layer) 

뉴런을 동일 계층에 여러개 둔 것을 레이어라고 부릅니다. 

레이어를 겹겹이 쌓은 것이 인공신경망 입니다. 인공신경망에서 레이어는 크게 3개의 종류로 구분합니다. 

  • 입력 레이어 (Input Layer) : 데이터(raw data) 를 최초로 받는 레이어 
  • 은닉 레이어 (Hidden layer) :  입력 레이어와 출력 레이어 사이의 레이어
  • 출력 레이어 (Output Layer) : 최종 출력 값을 가지는 레이어 

코드 예 : (노드 3개를 가진 Input Layer 1개, 노드 12개를 가진 Hidden layer 2개, 노드 2개를 가진 Output Layer 1개)  

        model = Sequential()
        model.add(Dense(12, input_dim=3))
        model.add(ReLU(alpha=0.01))
        model.add(Dense(12))
        model.add(ReLU(alpha=0.01))
        model.add(Dense(2, activation='linear'))
        model.compile(loss='mse', optimizer=Adam(learning_rate=self.learning_rate))

 

함수 

노드 간 상호작용을 위해 사용하는 함수들입니다. 

활성화 함수 (Activation function) 

각 뉴런에서 출력 값을 계산하는 함수입니다. 활성화 함수는 1) 일정한 범위 안에서의 출력 값 분포를 만들고 2) 다양한 패턴이 만들어지도록 도와줍니다. 1번과 2번은 엄연히 다른 말입니다. 

다양한 활성화 함수들이 있습니다. 

  • Sigmoid 
  • ReLU 
  • Softmax ... 

좀 더 찾아 보시면, 활성화 함수 뿐만 아닌 다양한 연산을 통해 출력 값을 계산하게 됩니다. 이 글에서 자세한 설명은 하지 않겠습니다. 

코드 예 : (활성화 함수로 ReLU 선택) 

model.add(Dense(12))
model.add(ReLU(alpha=0.01))

 

손실 함수 (loss function) 

신경망의 성능을 측정하는 함수입니다.  

다양한 손실 함수들이 있습니다. 

  • MSE (Mean Square Error) 
  • 힌지 손실 
  • 후버 손실 ...

코드 예 : (손실 함수로 MSE를 선택) 

     model.compile(loss='mse', optimizer=Adam(learning_rate=self.learning_rate))

 

최적화 함수 (Optimizer) 

손실 함수를 근거로 신경망을 학습시키는 알고리즘입니다. 최적화 함수는 손실 값이 적도록 가중치를 계속 업데이트합니다. 신경망의 핵심입니다. 

다양한 최적화 함수가 있습니다. 

  • 경사하강법 
  • 역전파 
  • Adam ...

코드 예 : (최적화 함수로 Adam을 선택) 

     model.compile(loss='mse', optimizer=Adam(learning_rate=self.learning_rate))

 

참고 자료