[AI in meal planning] 식단 계획에서의 최적화 문제 정의: 인공지능 적용을 위한 첫걸음

in #kr6 years ago (edited)

안녕하세요, @doctorbme 입니다. 생업이 매우 바빠져서 글이 늦었습니다. 이번에는 음식이나 식단을 구성하는 데에 있어서 인공지능이 어떻게 쓰일 수 있는지 고찰해보는 시간을 가져볼까 합니다. 이번 주제의 경우에는, 여러 측면으로 살펴볼 예정이기에, 연작으로 계획하고 있습니다.

  1. 정상인을 대상으로 하는 식단 계획에서의 인공지능 활용 및 고려사항
  2. 환자를 대상으로 하는 식단 계획에서의 인공지능 활용 및 고려사항
  3. 식단에서 유의미한 정보를 추출하는 과정에서의 인공지능 활용 및 고려사항
  4. 식단 계획에서의 인공지능 활용을 추구하고 있는 여러 서비스들/기업들

이를 위한 논의에 앞서, 가장 기본이 되는 것이 바로 최적화(Optimization) 문제의 정의(definition) 입니다.

shutterstock_28013851111.jpg

어떤 사람에게 최적의 식단을 제시한다는 것은 무엇을 의미할까요? 여기에서 최적이라는 것은 어떤 것을 의미할까요? 사실 여기서 우리는 최적화(optimization)이라는 것이 무얼 의미하는지 살펴보아야 합니다.

최적화 문제로서의 식단 계획

최적화 문제는 사실 수학적으로 정의할 수 있습니다.

간단하게는 주어진 어떤 함수 f(x)를 최대화시키거나 최소화시키는 x를 찾는 것입니다. 물론 이러한 x를 찾기 위해서는 x가 어떠한 범위 안에서 존재하는지 문제에서 정의가 되어 있어야 합니다. 또한 제한 조건을 걸어주어야 하는데, 이는 다른 함수 h(x)나 g(x)를 통해 아래와 같이 나타낼 수 있습니다.

어떤 함수 f, h, g에 대해서,
h(x)=0 및 g(x)≤0 을 만족하는 가능한 해들 중에서
f(x)를 최소화 혹은 최대화하는 x를 찾는 것

실제 (식단) 문제에 대한 대응

이렇게 추상적으로 정의된 문제를 , 사실은 실제 영역으로 대응시키는 것이 중요합니다. 이번 글의 주제와 같이, 누군가에게 알맞은 식단을 구성하기 위해서는 다양한 요인들을 고려해야겠죠. 각 사람들의 몸상태와 근육량, 운동량 등에 맞춘 전체 칼로리, 탄수화물/지방/단백질의 비율과 총량, 소듐/포타슘과 같은 전해질의 양, 비타민과 같은 여러 물질들. 예를 들어 x를 하루 동안 제공될 식단이라고 생각하면, 이러한 식단을 입력으로 하는 어떤 함수 f를 정의할 수 있을 것입니다.

이 경우, 어떤 사람이 각 음식에 대한 나름의 선호도를 가지고 있다고 생각해봅시다. 그러면 식단을 구성할 때에는, 이러한 선호도 혹은 취향에 가장 근접한 식단을 찾는 것이 유리할 것입니다. 즉, 좋아하는 음식을 반영하라는 철학이 들어가 있는 것입니다.

그렇다면 이 때 제한조건들은 어떻게 설정 해야할까요 앞서 제시한 칼로리 및 영양소를 설정해두는 것이 좋을 것입니다. 너무 과해도 안되고 너무 모자라도 안되겠죠.

예를 들어 아래 조건을 생각해봅시다.
(선호도를 반영하는 목적함수 f를 최대화시키는 것이 가장 주요한 목적임은 기본으로 가정하도록 하겠습니다.)

이는 식단이 제공하는 전체 칼로리가 2000~3000 kCal사이를 가져야한다는 조건입니다.


위 함수를, 주어진 식단 x에 대해서, 칼로리를 계산하는 함수로 놓습니다.
이를 최적화 문제의 꼴로 어떻게 나타낼 수 있을까요.

위와 같이 두 개의 조건을 구성하고, 새로운 함수들을 아래와 같이 정의합니다.

그러고 나서 아래의 조건을 만들면 됩니다.

즉, 앞선 최적화 문제의 수학적 꼴이, 사실은 일반적인 상황을 반영한다는 뜻이 됩니다.

입력 x의 구조

그렇다면 선호도 함수 f에 들어가는 x는 어떤 구조로 정의하면 좋을까요? 여러 연구나 개발마다 정의하는 방식은 다르겠지만, 여기에서는 음식에 따라 임의적으로 설정할 수 있다고 가정해봅시다. 그러니까 어떤 음식에 대한 선호도는 미리 사용자가 직접 숫자로 입력해 놓을 수도 있고 아니면 기존의 식단 구성에 따라서 선호도를 자동적으로 파악할 수도 있을 것입니다.

예를 들면 아래와 같이 정의할 수 있습니다

즉 위 정의에서는 하루에 5번 식사한다고 가정하고 각 식사에 대해 각각의 벡터 요소를 부여합니다. 그러면 예를 들어 아침 식단은 어떻게 정의할 수 있을까요? (계층적으로 정의하고 있습니다.)

이런 식으로 정의한다면, 아침은 각각 음식(dish)들의 조합으로 표현될 수 있을 것입니다. 이제 이러한 음식의 속성(attribute)을 정의할 수 있겠습니다. 역시 여러 방법이 있겠지만, 아래와 같이 정의해봅시다. (이러한 속성은 문제를 얼마나 많은 사항을 고려하느냐에 따라 더 복잡해질 수도 있습니다.)

결국 선호도를 가장 크게 하는 방향으로 음식들을 조합할 예정인데, 이 때 전체 식단에 대해 탄수화물을 얼마나 넣을지, 소듐 (나트륨)을 얼마나 제한할지, 영양권장량과 개인의 상태에 따라서 (제한 조건을 고려하여) 해를 도출하는 것이 필요합니다. 그리고 이러한 해를 잘 도출하기 위해서는 각 음식들의 속성들이 잘 정의 되어 있어야 합니다. 그리고 선호도를 f에 어떻게 반영할 것이냐에 있어서는, 단순히 선호도를 더할 수도 있고, 평균을 낼 수도 있습니다. 아니면 f에 선호도 대신 다른 속성을 반영해봐도 되겠지요. f를 정의하는 방법도 다양합니다.

가장 간단하게, f의 선호도 함수는, f에 포함된 여러 음식들의 선호도를 단순하게 더하는 방향으로 정의해봅시다. 즉, f = 선택된 음식1의 선호도 + 선택된 음식2의 선호도 + ...
이렇게 정의한다면, 하나 주의할 사항이 있습니다. 음식을 선택하면 선택할수록 음식 선호도의 합이 증가하기 때문에, 결국 f가 증가합니다. 따라서 적절한 제한조건을 걸어주지 않는다면, 무한정 음식을 선택하게 됩니다. 따라서, 또다른 함수 n(x)를 생각하고, n(x)를 x의 요소의 갯수를 세어주는 함수라고 생각한다면, n(x)를 특정 숫자, 혹은 고정된 범위로 지정해볼 수 있습니다. 예를 들면 아래와 같이 말이지요.

이 경우에는, 전체 음식의 갯수를 3~5 개로 제한하자는 이야기입니다.

이렇게 설정하면 무조건 5개를 선택하는 것이 아니냐고요? 꼭 그렇지는 않습니다. 다른 제한 조건들이 부가되면, 이 문제는 일종의 배낭문제(knapsack problem)가 됩니다. 배낭문제는, 한정된 공간 안에서 특정 부피를 가지는 물건을 채워넣고, 이 때 무게를 최대화하는 방법을 찾는 것인데, 우리는 흔히들 공간을 다 채울수록 무게가 많이 나간다고 생각하지만 꼭 그런 것은 아닙니다. 예를 들어 5L 의 공간 안에 물체를 채운다고 생각해봅시다. 이 때 물체의 종류는 3개로, (2L, 3kg), (3L, 4kg), (4L, 8kg)의 속성을 가지고 있으면 2L와 3L의 물체 두 개를 선택하면 부피를 꽉 채우게 되지만, 무게는 7kg로, 마지막 4L짜리 1개를 선택하는 것보다 작습니다. 이러한 상황이 여기에서도 발생합니다.

추가적으로 각 음식 선택의 weight를 반영할 수 있습니다. 우리는 떡볶이를 표준 기준을 바탕으로 1인분을 먹을 수도 있지만, 0.5인분을 먹고 다른 것을 더 먹을 수도 있습니다. 즉, 우리가 섭취하는 식단은 음식의 선형결합으로 생각해볼 수 있는 것입니다.

결국 최적화된 해를 찾게 되면, 아래와 같은 식으로 구성될 것입니다. (간단한 예입니다.)

<오늘의 추천 식단>
아침 = (사과 50g, 시리얼 100g, 우유 100g)
점심 = (쌀밥 200g , 미역국 150g, ...)
간식 = (없음)
...

어떠한 영역이든 머신러닝이나 인공지능의 기법을 적용하기 위해서는, 우선 어떠한 정보를 활용할 수 있으며, 이러한 정보를 잘 이용할 수 있도록 구성하는 온톨로지(ontology)의 영역이 기본적으로 중요합니다. 이를 지식기반 인공지능(knowledge-based AI)이라고 부르기도 합니다. 정보를 구성함에 있어서, 영역 지식 혹은 영역지식의 전문가들의 의견이 반영됩니다.

다음 편에서는 이러한 정보를 바탕으로 어떻게 복잡한 문제를 구성하고, 최적의 식단을 찾아나가게 될지, 그리고 최적을 찾는 알고리즘에 따른 식단 구성의 차이는 어떻게 변화할지 살펴보도록 하겠습니다.

예를 들어 유전 알고리즘(genetic algorithm)을 통해, 각 해의 국소 최적해(local optimum)을 찾아다니는 경우도 존재하고, 사례기반추론(Case-based Reasoning)과 새로운 사례에 대한 적응(Adaptation )을 통해 새로운 해를 도출하는 방법도 존재합니다.

요약

  1. 식단 구성의 문제에 대해 인공지능을 적용하기 위해서는, 우선 최적화 관점으로 살펴볼 필요가 있다.
  2. 식단에 대한 정보를 실제로 알고리즘이 사용할 수 있도록 가공하기 위해서는, 영역 지식과 저장된 구조가 중요하다.

참고문헌
[1] Khan AS, Hoffmann A. , Building a case-based diet recommendation system without a knowledge engineer, Artif Intell Med. 2003 Feb;27(2):155-79.
[2] Gaál B, Vassányi I, Kozmann G. , A novel artificial intelligence method for weekly dietary menu planning. , Methods Inf Med. 2005;44(5):655-64.
[3] Johan Aberg, Dealing with Malnutrition: A Meal Planning System for Elderly, AAAI Spring Symposium: Argumentation for Consumers of Healthcare, 2006

Note: 오늘 사용된 이미지는 셔터스톡에서 구매한 이미지 입니다.


M-SHAPE 배너.png
투명배경.png

전문가들이 직접 쓰는 최초의 STEEM 의학 매거진]

https://mediteam.us

Sort:  

흥미롭게 잘 읽었습니다ㅎㅎ 냉장고에서 추천식단을 클릭하면 배달도 되고 요리도 자동으로 만들어지면 생활 패턴이 확 바뀌지않을까하는 상상을 하게 되네요ㅎ

감사합니다. :)
방향성을 잘 포착하셨네요. 그렇지 않아도 최근 인공지능을 탑재하여, 식재료를 냉장고에 등록하고 최적의 식단과 조리법을 추천해주는 냉장고 들이 등장하고 있는 추세입니다. 말씀주신대로 배달/요리까지 가능하다면, 자동화된 주방으로서 상당히 재미있는 서비스가 이루어질 것 같습니다. 이렇게 IoT (사물인터넷)과도 연동이 되면, smart factory => smart kitchen 이 되면서 재미있겠다는 상상을 덧붙여봅니다 :)

예를 들어주신 대로라면 dish1, dish2..의 weight를 개인마다 조절해보면서 맘에드는 조합을 찾아봐야 겠네요. 최적화, ontology 개념 잘 배웠습니다!

네. 그렇습니다. 정확히 보셨습니다. 이 부분에 대한 설명이 본문에서는 불충분한 것 같아, 이야기를 듣고 본문을 좀 더 보강하였습니다. 정말로 감사합니다.

온톨로지는 금방 지나간감이 있는데, 이번 글, 혹은 다음글에서 좀더 보충하도록 하겠습니다. :)

생각하기 복잡하기에 돈좀있는 사람들은 영양제로 모자를만한걸 떼우는 경우도 많아진것같습니다.

네. 그러한 경우도 존재합니다. 식단을 고려하는 것도 신경이 많이 쓰이는 일일 것이기 때문에, 식단 자체를 한번 제시해보자는 것이, 식단/영양 관련 AI의 역할이기는 한데, 이 때 주어진 제한조건에 따라 영양소를 세팅하는 경우도 있을 것입니다.

더불어서 특정 상태에 있는 경우에는, 영양소가 너무 과해도 문제가 생기는데, (아주 간단한 예로 고혈압 혹은 고혈압 전단계에 있는 사람의 경우 나트륨(소듐)은 제한하겠지요. 임신부의 경우에는 비타민A를 과도하게 섭취하면 기형아 문제가 생길수도 있습니다.), 이러한 측면은 과잉 섭취를 제한하고 알려주는 방향으로 나아가야할 것입니다. :)

f = sigma선택된 음식n의 선호도
n->∞

따라서 적절한 제한조건을 걸어주지 않는다면, 무한정 음식을 선택하게 됩니다.

..... 저같은 사람 있는 줄 어떻게 알고 제한조건까지 같이 주시다니 이 분 용의주도하신 분....ㅋㅋㅋㅋㅋ

근데

간식 = (없음)

넘나 잔인한 것....

용의주도한(?) 설계가 핵심입니다. 우리가 10000 kCal를 하루에 먹어도 되기는 하지만, 금세 그냥 건강한(?) 돼지가 될테니까요. 사실 이러한 문제의 경우 제한조건이 핵심입니다. 개인의 상태를 반영하기 위해서는, 각 영양소에 대한 제한조건 또한 맞춤형으로 설정되어야 합니다.

우리 모두 간식은 없는 걸로 합시다. (...)
간식 = (커피 3잔, 과자 2봉지, 케이크 1조각, ....)
이렇게 하기에는 아침 = (없음), 저녁=(없음) 해야할지도 몰라요. (...)

재미있습니다. 나중에 이런 최적화 써비스와 식당 예약을 조합하여 원하는 음식과 재료를 본인에게 최적화하여 써빙하는 사업은 어떨까요? 나중에는 일반 음식점에서 AI들이 음식을 만들 날이 올까요? 미래를 생각하면 궁금하기도 두렵기도 합니다.

즐거운 상상인 것 같습니다. 실제 비즈니스와 연계되면 아무래도 뛰어드는 기업들도, 참여하는 소비자들도 많아질 것이라는 생각을 합니다. 저는 AI들이 많은 곳에 침투할 것이라 생각합니다. 일반 음식점도 예외는 아닐 것이라 봅니다.

@yourwisedentist님이 당신의 글을 번역 요청했습니다

의뢰시간언어금액거래번호송금기한
2018-5-31KO → EN29.61 STEEMd250503e8418c664802b1abf87e664f82018-5-31 16:28
  • 현재는 베타 버전이며 단어당 0.02 STEEM의 고정단가를 적용하였습니다.
  • 송금기한까지 송금을 완료하여야 Steemit에서 활동하는 번역가가 작업을 시작합니다.
  • Steemit에서 콘텐츠를 간편하게 번역하고 싶다면 Steemit Translation by CICERON을 설치하세요.
  • Steemit 번역가 등록하고 STEEM으로 보상받으세요.

Powered by Steemit Translation by CICERON

Coin Marketplace

STEEM 0.26
TRX 0.11
JST 0.033
BTC 63868.85
ETH 3063.91
USDT 1.00
SBD 4.10