»
S
I
D
E
B
A
R
«
6. 피드백 컨트롤러 튜닝(Feedback Controller Tuning)
February 25th, 2014 by Wegra Lee

이 글은 한국의 소프트웨어 개발자에게 피드백 제어(Feedback Control)란 개념을 소개하고자 Phillip Janert의 글을 번역한 것이다.


1부 – 피드백이란
2부 – 피드백 원칙
3부 – 피드백이 필요한 이유
4부 – 피드백은 다르다
5부 – 피드백 컨트롤러
6부 – 피드백 컨트롤러 튜닝
7부 – 자가적응과 피드백은 다르다


앞의 글에서 피드백 루프에 사용할 PID 컨트롤러를 소개했다.

이를 수식으로 나타내면 다음과 같으며

janert-feedback-controller

비연속적 시간 형태로 바꿔 소프트웨어로 구현한 모습은 다음과 같다.

sum += error
output = kp * error + DT * ki * sum + kd * (error – prev) / DT
prev = error

컨트롤러 상수인 Kp, Ki, Kd는 컨트롤러를 운영 환경에 적응하기 위한 값이다. 캐시의 예에서 보면, 출력(제어하려는 지표)은 0.0 ~ 1.0 사이의 값이지만, 입력(컨트롤러가 계산해야 할 양)은 훨씬 큰 정수값이다. 이제 이러한 범위의 차에 적응할 수 있는 적절한 컨트롤러 상수를 선택해야 한다.

janert-feedback-loop2

자! 앞으로 입력과 출력이라는 용어는 항시 제어 입력과 제어 출력을 의미할 것이다. 즉 우리 관심사인 지표가 출력이고, 그 값에 움직이기 위해 우리가 조절할 수 있는 양은 입력이다. 이런 제어 입력이나 출력은 물론 캐시에 아이템을 넣고 빼는 요청과는 아무런 상관이 없는 개념이다.

우리는 다음 질문의 답을 찾아야 한다. 시스템의 출력에 원하는 만큼의 변화를 주려면 입력은 얼마나 변경해야 하는가? 캐시에서라면 ‘적중률을 0.1만큼 조정하려면 캐시 크기에 어느 정도의 변화를 줘야 할까?’ 정도의 질문이 될 것이다.

대게 가장 간단한 (아마도 가장 정확하기도 할) 답변은 직접 측정해보는 것이다. (피드백 루프 없이) 캐시를 잠시 운영해보고 크기를 바꾼 후 적중률이 안정되기를 기다란 다음 새로운 적중률을 이전 값과 비교해본다. 이렇게 구한 컨트롤러 상수의 첫 후보는 다음과 같다.

k = (size_after – size_before) / (hitrate_after – hitrate_before)

초기의 캐시 크기가 1,000에 적중률은 0.7이었고, 이를 1,200으로 키우니 적중률이 0.9까지 올랐다고 치자. 그 결과는 다음과 같다.

k = (1200 – 1000) / (0.9 – 0.7) = 200 / 0.2 = 1000

첫 시도 치곤 나름 괜찮다. 일반적으로 컨트롤로 상수가 클수록 변화에 민감하게 반응하지만, 안정성이 떨어져서 자칫 불안정한 상태로 빠질 가능성이 커진다. 결국, 절대적으로 옳은 값이 있는 것은 아니다. 대신 반응속도와 안정성을 적절히 조화시켜야 하는 문제라, 응용 분야가 달라지면 최적의 제어 전략도 바뀌게 된다.

적절한 컨트롤러 상수를 구하는 일(컨트롤러 튜닝)이 정말 중요하다. 잘못 선택한 상수는 만족스럽지 못한 동작을 낳는다. 변화에 너무 굼떠서 답답한 시스템이 되거나 너무 쉽게 요동치는 불안정한 시스템이 될 것이다. 컨트롤러 튜닝이 중요한 만큼 업계는 이 값을 구하는 다양한 기법을 개발해 왔다. 물론 완벽한 방법이란 존재하지 않는다. 최적의 상수는 시스템 자체뿐 아니라 우리가 그 시스템을 활용하는 방식에도 영향을 받기 때문이다.

튜닝 방식 중 하나는 앞서 논의한 방식과 유사하다. 시스템 입력을 한 단위만큼 변경하고 시스템의 출력을 관찰한다. 다른 점이라면 출력의 변화를 시간을 두고 관찰한다는 것이다. 그 결과는 다음 그림처럼 보일 것이다. 입력 한 단위의 변경에 따른 이처럼 동적인 반응을 ‘공정 반응 곡선(process reaction curve)’이라 한다.

janert-feedback-step

이 그래프는 정적인 입출력 관계뿐 아니라 시스템이 얼마나 빠르게 새로운 값으로 안정화되는가 하는 정보도 담고 있다. 시스템이 다시 안정되기까지의 이 시간을 공정의 “시간 상수(time constant)”라 하며, 컨트롤러 상수에 반드시 반영되어야 할 값이다. 기본적으로 느리게 반응하는 시스템일수록 더 강하게 조치해야 하며 이 곡선의 여러 속성으로부터 컨트롤러 상수를 구하는 다양한 휴리스틱을 개발해 왔다.

컨트롤러 튜닝은 피드백 루프가 올바로 작동하기 위한 핵심이다. 항상 최적값을 내어주는 절대 규칙도 없고, 방금 언급한 휴리스틱 역시 너무 다양하다. 이 모든 것은 어쩌면 예술, 아니 마법의 영역일 지도 모른다. 하지만 원리만 잘 이해한다면 이러한 어려움도 이겨낼 수 있다.

다음 글에서는 피드백의 기본 개념을 다시 상기하며 더 일반적인 개념인 “자가 적응(self-adaptive)” 시스템과 어떻게 다른지 논해보겠다.


»  Substance: WordPress   »  Style: Ahren Ahimsa